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???**
}
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
}
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.
Implémentons un simple formulaire d'abonnement ASP.NET MVC avec la zone de texte de l'e-mail.
Les données du formulaire sont mappées sur ce modèle
public class SubscribeModel
{
[Required]
public string Email { get; set; }
}
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>
}
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.
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>
}
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)
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
}
Changez votre contrôleur comme ci-dessous.
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var Empname = model.Empname;
}
[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
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();
}
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var value1 = model.EmpName;
}