Forms 视图使用主布局时MVC 4\表单提交按钮不工作

Forms 视图使用主布局时MVC 4\表单提交按钮不工作,forms,asp.net-mvc-4,controller,Forms,Asp.net Mvc 4,Controller,好的,似乎当我创建了一个视图来处理_layout.cshtml时,表单中的提交按钮不起作用(没有任何操作返回到控制器) 只有当我创建了一个视图并取消选中“使用布局或母版页”时,按钮才起作用 这似乎非常不清楚,所以-我怎么能在使用general _layout.cshtml的同时使用一个 下: 尝试在MVC4(+Razor)中实现表单 控制器(应获得post操作): public class GeneralController { [HttpPost]

好的,似乎当我创建了一个视图来处理_layout.cshtml时,表单中的提交按钮不起作用(没有任何操作返回到控制器)

只有当我创建了一个视图并取消选中“使用布局或母版页”时,按钮才起作用

这似乎非常不清楚,所以-我怎么能在使用general _layout.cshtml的同时使用一个

下: 尝试在MVC4(+Razor)中实现表单

控制器(应获得post操作):

public class GeneralController {
        [HttpPost]
                public ActionResult SearchResults(SearchParamsModel searchParams)
                {
                    // doin some stuff here
                    return View("SearchResultsView");
                }
}
查看(.cshtml)


您在嵌套的
表单
中声明提交按钮,并且输入的
属性1
不是该表单的后代。将输入元素移动到嵌套表单中,或完全删除嵌套表单


编辑:嵌套的表单元素也没有指定操作,因此如果此视图的默认值不是
常规/SearchResults
,您将无法获得预期的结果

您应该删除内部表单标记

@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>
}
@model mvcapapplication2.Models.SearchParamsModel
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@使用(Html.BeginForm(“SearchResults”、“General”、FormMethod.Post))
@LabelFor(model=>model.Property1)
@Html.TextBoxFor(model=>model.Property1)
}

我遇到了类似的问题,但与您上面描述的问题不同,解决方法如下:

我的“MVC4布局页面”在布局文档中有“表单”标记。另一方面,我的视图连接到布局页面(视图页面也有“using(Html.BeginForm()){…}”)


因此,从布局页面中删除“表单”标记应该可以做到,“因为从视图页面中使用(Html.BeginForm()){…}”)已经不再嵌套了。

将代码放到错误的地方,谢谢!我完全按照您的建议做了,并且可以工作!因此,无需在表单上声明
@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>
}