如何在mvc4中从视图到控制器获取文本框值?如果我在控制器中使用httppost方法,则找不到页面错误。
查看
@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>
}
模型
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; }
}
}
控制器
public ActionResult DisplayForm()
{
FormModel frmmdl = new FormModel();
frmmdl.Empname=**How to get the textbox value here from view on submitbutton click???**
}
答案 0 :(得分:12)
首先,您需要将按钮类型更改为“提交”。因此,您的表单值将提交给您的Action方法。
从:
<input type="button" id="submitId" value="submit" />
为:
<input type="submit" id="submitId" value="submit" />
其次,您需要在Action方法中将模型添加为参数。
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var strname=model.Empname;
return View();
}
第三,如果您的Controller名称是“FormController”。您需要在视图中将Html.Beginform的参数更改为:
@using (Html.BeginForm("DisplayForm", "Form", FormMethod.Post))
{
//your fields
}
P.S。 如果您的视图与Action方法的名称相同,即“DisplayForm”,则无需在Html.BeginForm中添加任何参数。只是为了简单。像这样:
@using (Html.BeginForm())
{
//your fields
}
答案 1 :(得分:3)
为表单发布ActionResult
:
[HttpPost]
public ActionResult DisplayForm(FormModel formModel)
{
//do stuff with the formModel
frmmdl.Empname = formModel.Empname;
}
查看Model Binding。默认模型绑定将获取已发布表单值中嵌入的数据,并从中创建对象。
答案 2 :(得分:2)
让我们用电子邮件文本框实现简单的ASP.NET MVC订阅表单。
表单中的数据映射到此模型
public class SubscribeModel
{
[Required]
public string Email { get; set; }
}
视图名称应与控制器方法名称匹配。
@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>
}
Controller负责处理请求并返回正确的响应视图。
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);
}
}
这是我的项目结构。请注意,“Home”视图文件夹与HomeController名称匹配。
答案 3 :(得分:1)
你的模型将作为一个对象发布在动作上,你可以在帖子上对它进行操作:
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
// do whatever needed
string emp = model.EmpName;
}
你发布的数据总是在行动中加上 HttpPost 属性。
你的观点也有错误,就像这样:
@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>
}
答案 4 :(得分:0)
来自隐藏字段的模型值?我推荐如下所示的强类型方法:
public ActionResult DisplayForm(string Emplname, string Emplid, string Empldepart)
答案 5 :(得分:0)
有两种方法可以做到这一点。
第一个使用TryUpdateModel
:
public ActionResult DisplayForm()
{
FormModel frmmdl = new FormModel();
TryUpdateModel (frmmdl);
// Your model should now be populated
}
另一个更简单的版本只是将模型作为动作[HttpPost]
版本的参数:
[HttpPost]
public ActionResult DisplayForm(FormModel frmmdl)
{
// Your model should now be populated
}
答案 6 :(得分:0)
如下所示更改您的控制器。
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var Empname = model.Empname;
}
答案 7 :(得分:0)
[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将具有值
答案 8 :(得分:0)
您需要同时拥有Get和Post方法:
[HttpGet]
public ActionResult DisplayForm()
{
FormModel model=new FormModel();
return View(model);
}
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var employeeName=model.Empname;
return View();
}
答案 9 :(得分:0)
[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
var value1 = model.EmpName;
}