web-dev-qa-db-fra.com

Le bouton d'envoi MVC ne se déclenche pas

J'utilise ASP.net MVC 4 avec le moteur Razor.

J'ai une page (Index.cshtml) et un contrôleur (HomeController.cs)

J'essaie de brancher mon bouton de soumission à un résultat d'action dans mon contrôleur - mais je n'arrive pas à le faire démarrer.

Mon HTML:

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post))
{
      <div class="main-Background">

      ******lots of other html here*******
        <button type="submit" id="btnSave">Save</button>

    </div>
}

Mon contrôleur:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }


        [HttpPost]
        public ActionResult SubmitForm()
        {
          return View();
        }

    }

Pour le moment, je n'ai pas implémenté de modèle pour transmettre les valeurs au contrôleur, je voulais juste voir si je pouvais faire fonctionner ActionResult SubmitForm.

J'ai essayé @using (Html.BeginForm()) sans paramètres, j'ai également essayé d'inclure [HttpPost] Au-dessus de mon ActionResult, sans aucune chance.

Modifier j'ai également essayé d'utiliser <input type="submit" id="btnSave">Save</input> au lieu d'un bouton.

Je ne sais pas où je vais mal

12
DNKROZ

Il s'avère que jQuery empêchait ActionResult d'être touché.

J'ai eu un événement de clic sur un bouton qui "dévorait" la fonctionnalité ActionResult. J'ai résolu cela en appelant mon ActionResult en utilisant Ajax.

12
DNKROZ

Vous n'avez pas besoin d'utiliser "-Controller" suffixe. Utilisez simplement Home au lieu de HomeController, MVC le convertira pour vous.

Utilisation

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post, new { id = "submitForm" }))

au lieu de

@using (Html.BeginForm("SubmitForm", "HomeController", FormMethod.Post, new { id = "submitForm" }))

Codes complets

voir

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post, new { id = "submitForm" }))
{
      <div class="main-Background">

          ******lots of other html here*******
          <input type="submit" id="btnSave">Save</input>

    </div>
}

Et contrôleur

[HttpPost]
public ActionResult SubmitForm()
{
    return View();
}
3

Vue:

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post))
{
  <div class="main-Background">
    ******lots of other html here*******
    <button type="submit" id="btnSave">Save</button>

  </div>
}

Manette:

[HttpPost]
public ActionResult SubmitForm()
{
    return View();
}

Peut-être que le problème est survenu à cause d'un autre code HTML dans votre div, alors vérifiez-le. Sinon, cela fonctionne parfaitement.

1
Sunil Shrestha

Vous devez ajouter Html.BeginForm avec les paramètres. Voici un exemple:

ActionName - Nom de l'action. Dans ce cas, le nom est Créer.

ControllerName - Nom du contrôleur. Dans ce cas, le nom est Home.

FormMethod - Il spécifie la méthode de formulaire, c'est-à-dire GET ou POST. Dans ce cas, il sera défini sur POST.

http://localhost:60386//Home/Create


@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
  @Html.EditorFor(model => model.FirstName)

  <input type="submit" value="Create"/>
}


HomeController.cs:
        [HttpPost]
        public ActionResult Create(Person person)
        {

            if (ModelState.IsValid)
            {
                db.Persons.Add(person);
                db.SaveChanges();
                return RedirectToAction("Create");
            }

            return View(person);
        }
0
live-love