[英]MVC3 - Understanding POST with a button
如何在提交后获取表单数据?
<form target="_self" runat="server">
<p>
<select id="BLAHBLAH2">
<option>2010</option>
<option>2011</option>
<option>2012</option>
<option>2013</option>
</select>
<input type="submit" runat="server" value="Change Year" />
</p>
</form>
这会触及控制器的Index
方法。 但是, Request.Form
没有任何内容。 为什么?
其次,我可以使用
<input type="button"
而不是type=submit
? 也就是说,不通过onclick
引入ajax。
最后,如何在控制器中提交不同的方法,例如Create
?
尝试删除那些runat服务器标签。 它们不应该在ASP.NET MVC中使用。 您的选择也没有名称。 如果输入元素没有名称,则不会提交任何内容。 此外,您的选项标签必须具有值属性,指示如果选择此选项将向服务器发送的值:
<form action="/Home/Create" method="post">
<p>
<select id="BLAHBLAH2" name="BLAHBLAH2">
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
</select>
<input type="submit" value="Change Year" />
</p>
</form>
但是在ASP.NET MVC中生成表单的正确方法是使用HTML帮助程序。 根据您使用的视图引擎,语法可能会有所不同。 以下是Razor视图引擎的示例:
@model MyViewModel
@using (Html.BeginForm("Create", "Home"))
{
<p>
@Html.DropDownListFor(x => x.SelectedYear, Model.Years)
<input type="submit" value="Change Year" />
</p>
}
这里有一个给定视图模型的强类型视图:
public class MyViewModel
{
public string SelectedYear { get; set; }
public IEnumerable<SelectListItem> Years
{
get
{
return Enumerable
.Range(2010, 4)
.Select(x => new SelectListItem
{
Value = x.ToString(),
Text = x.ToString()
});
}
}
}
由一些将呈现此视图的控制器操作填充:
public class HomeController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel();
return View(model);
}
[HttpPost]
public ActionResult Create(MyViewModel model)
{
... model.SelectedYear will contain the selected year
}
}
您的<option>
标签都没有值:
...
<option value="2010">2010</option>
...
正如David所说,runat =“server”绝对是WebForms的东西,所以你可以86。
如果要在控制器上提交不同的方法,只需指定该方法的URL即可。
使用Html.BeginForm的简单方法:
@using (Html.BeginForm("AnotherAction", "ControllerName")) {
<!-- Your magic form here -->
}
<form action="@Url.Action("AnotherAction")" method="POST">
<!-- Your magic form here -->
</form>
您也可以使用In Controller
int Value = Convert.ToInt32(Request["BLAHBLAH2"]); //To retrieve this int value
在.cshtml文件中使用
<select id="IDxxx" name="BLAHBLAH2">
// Request [“”]将检索html对象的VALUE,其请求的“名称”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.