只有在我创建视图并取消选中“使用布局或母版页”时 - 按钮才有效!
这似乎非常不清楚,所以 - 我如何同时使用_ {3}}一般的_layout.cshtml视图?
下面: 尝试在MVC4(+ Razor)中实现一个表单
控制器(应该接受后期操作):
public class GeneralController {
[HttpPost]
public ActionResult SearchResults(SearchParamsModel searchParams)
{
// doin some stuff here
return View("SearchResultsView");
}
}
查看(.cshtml)
@model Models.SearchParamsModel
@using (Html.BeginForm("SearchResults", "General", FormMethod.Post))
{
<section class="form-field">
<input type="text" name="Property1" id="Property1" class="field field139 autocomplete-init-no-img" />
<label for="Property1">value1</label>
<form action="" method="post" class="clearfix">
<input
type="submit"
value="some value"
class="submit btn blue-btn special-submit" />
</form>
</section>
}
模型
public class SearchParamsModel
{
public string Property1{ get; set; }
}
答案 0 :(得分:12)
您应该删除内部表单标记
@using (Html.BeginForm("SearchResults", "General", FormMethod.Post))
将为您生成表单标记。
此外,您应该使用html帮助器来生成表单元素:
@Html.LabelFor(model => model.Property1)
@Html.TextBoxFor(model => model.Property1)
由于这个原因,可能是一个可能的模型绑定问题。 提交按钮属于您的嵌套内部表单,此处没有提交任何模型。
@model MvcApplication2.Models.SearchParamsModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("SearchResults", "General", FormMethod.Post))
<section class="form-field">
@Html.LabelFor(model => model.Property1)
@Html.TextBoxFor(model => model.Property1)
<input type="submit" value="some value" class="submit btn blue-btn special-submit" />
</section>
}
答案 1 :(得分:2)
我有类似的问题,但上面描述的问题不一样,解决方法如下:
我的&#34; MVC 4布局页面&#34;有&#34;形式&#34;标签内部布局文档。另一方面,我的视图已连接到布局页面(查看页面也有&#34;使用(Html.BeginForm()){...}&#34;)
所以,删除&#34;表格&#34;布局页面中的标签应该做的事情&#34;因为使用(Html.BeginForm()){...}&#34;)&#34;来自视图页面不再嵌套。
答案 2 :(得分:1)
您在嵌套的Form
中声明了提交按钮,输入Property1
不是该表单的后代。将输入元素移动到嵌套表单中或完全删除嵌套表单
编辑:您的嵌套表单元素也未指定操作,因此如果General/SearchResults
不是此视图的默认值,则无法获得预期结果