3

好的,经过长时间的调查,似乎当我创建了一个与 _layout.cshtml 一起使用的视图时 - 我拥有的表单中的提交按钮不起作用(没有任何操作返回给控制器)​​。

仅当我创建视图并取消选中“使用布局或母版页”时 - 按钮才起作用!

这似乎非常不清楚,所以 - 我如何才能同时查看通用 _layout.cshtml 和工作表单按钮

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

控制器(应该得到 post 操作):

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; }
    }
4

3 回答 3

13

你应该删除你的内部表单标签,

@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>
}
于 2013-10-08T20:25:34.977 回答
3

我有类似的问题,但与您上面描述的问题不同,以这种方式解决:

我的“MVC 4 布局页面”在布局文档中有“表单”标签。另一方面,我的视图连接到布局页面(视图页面也有“使用(Html.BeginForm()){...}”)

因此,从布局页面中删除“表单”标签应该做的事情,“因为使用 (Html.BeginForm()){...}”) 从视图页面不再嵌套。

于 2015-07-06T08:12:58.753 回答
1

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

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

于 2013-10-08T20:21:58.750 回答