web-dev-qa-db-fra.com

Comment obtenir la valeur de la zone de texte de la vue au contrôleur dans mvc4 sur le bouton de soumission, cliquez sur

Comment obtenir la valeur de la zone de texte de la vue au contrôleur dans mvc4? Si j'utilise la méthode httppost dans le contrôleur, l'erreur de page introuvable n'a pas été détectée.

Vue

@model MVC_2.Models.FormModel

@{
    ViewBag.Title = "DisplayForm";
}

@using (Html.BeginForm("DisplayForm", "FormController", FormMethod.Post))
{
    <form>
        <div>
            @Html.LabelFor(model => model.Empname)
            @Html.TextBoxFor(model => model.Empname)
           @* @Html.Hidden("Emplname", Model.Empname)*@

            @Html.LabelFor(model => model.EmpId)
            @Html.TextBoxFor(model => model.EmpId)
           @* @Html.Hidden("Emplid", Model.EmpId)*@

            @Html.LabelFor(model => model.EmpDepartment)
            @Html.TextBoxFor(model => model.EmpDepartment)
           @* @Html.Hidden("Empldepart", Model.EmpDepartment)*@

            <input type="button" id="submitId" value="submit" />

        </div>
    </form>
}

modèle

   public class FormModel
    {
        public string _EmpName;
        public string _EmpId;
        public string _EmpDepartment;

        public string Empname
        {
            get {return _EmpName; }
            set { _EmpName = value; }
        }

        public string EmpId
        {
            get { return _EmpId;}
            set {_EmpId =value;}
        }

        public string EmpDepartment
        {
            get { return _EmpDepartment; }
            set { _EmpDepartment = value; }
        }
    }

manette

        public ActionResult DisplayForm()
        {
            FormModel frmmdl = new FormModel();
            frmmdl.Empname=**How to get the textbox value here from view on submitbutton click???**
        }
7
User

Vous devez d'abord changer le type de votre bouton en "soumettre". vos valeurs de formulaire seront donc soumises à votre méthode d'action.

de:

<input type="button" id="submitId" value="submit" />

à:

<input type="submit" id="submitId" value="submit" />

Deuxièmement, vous devez ajouter votre modèle en tant que paramètre dans votre méthode d'action.

[HttpPost]
public ActionResult DisplayForm(FormModel model)
    {
       var strname=model.Empname;
             return View();
    }

Troisièmement, si le nom de votre contrôleur est "FormController". vous devez changer le paramètre de votre Html.Beginform dans votre vue à ceci:

@using (Html.BeginForm("DisplayForm", "Form", FormMethod.Post))

    {
    //your fields
    }

P.S. Si votre vue porte le même nom que votre méthode Action qui est "DisplayForm", vous n'avez pas besoin d'ajouter de paramètre dans Html.BeginForm. juste pour faire simple. ainsi:

@using (Html.BeginForm())
{
//your fields
}
12
Romeo

Ayez un ActionResult pour le post du formulaire:

[HttpPost]
public ActionResult DisplayForm(FormModel formModel)
{
    //do stuff with the formModel
    frmmdl.Empname = formModel.Empname;
}

Regardez Model Binding . La liaison de modèle par défaut prendra les données incorporées dans vos valeurs de formulaire publiées et créera un objet à partir de celles-ci.

3
DGibbs

Implémentons un simple formulaire d'abonnement ASP.NET MVC avec la zone de texte de l'e-mail.

Modèle

Les données du formulaire sont mappées sur ce modèle

public class SubscribeModel
{
    [Required]
    public string Email { get; set; }
}

Vue

Le nom de la vue doit correspondre au nom de la méthode du contrôleur.

@model App.Models.SubscribeModel

@using (Html.BeginForm("Subscribe", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
    <button type="submit">Subscribe</button>
}

Manette

Le contrôleur est responsable du traitement des demandes et du retour de la vue de réponse appropriée.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Subscribe(SubscribeModel model)
    {
        if (ModelState.IsValid)
        {
            //TODO: SubscribeUser(model.Email);
        }

        return View("Index", model);
    }
}

Voici ma structure de projet. Veuillez noter que le dossier de vues "Accueil" correspond au nom de HomeController.

ASP.NET MVC structure

2
Andrei

Votre modèle sera publié en tant qu'objet sur l'action et vous pouvez le mettre en action sur un message comme celui-ci:

[HttpPost]
public ActionResult DisplayForm(FormModel model)
        {
            // do whatever needed
          string emp = model.EmpName; 
        }

si vous publiez des données, mettez toujours l'attribut HttpPost sur l'action.

Votre vue comporte également des erreurs, faites comme ceci:

@using (Html.BeginForm("DisplayForm", "Form", FormMethod.Post))
{
        <div>
            @Html.LabelFor(model => model.Empname)
            @Html.TextBoxFor(model => model.Empname)
           @* @Html.Hidden("Emplname", Model.Empname)*@

            @Html.LabelFor(model => model.EmpId)
            @Html.TextBoxFor(model => model.EmpId)
           @* @Html.Hidden("Emplid", Model.EmpId)*@

            @Html.LabelFor(model => model.EmpDepartment)
            @Html.TextBoxFor(model => model.EmpDepartment)
           @* @Html.Hidden("Empldepart", Model.EmpDepartment)*@

            <input type="button" id="submitId" value="submit" />

        </div>

}
1
Ehsan Sajjad

Modéliser les valeurs d'un champ caché? Je recommande l'approche fortement typée illustrée ci-dessous:

public ActionResult DisplayForm(string Emplname, string Emplid, string Empldepart)
0
Paul Zahra

Vous pouvez procéder de deux manières.

Le premier utilise TryUpdateModel:

    public ActionResult DisplayForm()
    {
        FormModel frmmdl = new FormModel();
        TryUpdateModel (frmmdl);

        // Your model should now be populated
    }

L'autre version, plus simple, consiste simplement à avoir le modèle comme paramètre sur le [HttpPost] version de l'action:

    [HttpPost]
    public ActionResult DisplayForm(FormModel frmmdl)
    {
        // Your model should now be populated
    }
0
Adrian Wragg

Changez votre contrôleur comme ci-dessous.

[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
   var Empname = model.Empname;
}
0
Ashwini Verma
[HttpPost]
 public ActionResult DisplayForm(FormModel model)
 {
     FormModel frmmdl = new FormModel();
     frmmdl.Empname=**How to get the textbox value here from view on submitbutton //click???**
 }

model.Empname aura la valeur

0
Zaid Bin Irfan

Vous devez disposer des méthodes Get et Post:

[HttpGet]
public ActionResult DisplayForm()
    {
       FormModel model=new FormModel();
             return View(model);
    }
[HttpPost]
public ActionResult DisplayForm(FormModel model)
    {
       var employeeName=model.Empname;
             return View();
    }
0
Ni3
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
    var value1 = model.EmpName;
}
0
VictorR