1

我有一个通用的“索引”页面,其中列出了给定表格的所有条目,并且有一个侧边栏允许过滤网格中的数据。我的模型如下:

public class GenericFormIndexModel
    {
        public IEnumerable<IGenericForm> Entries { get; set; }

        public FormSearchQueryModel Query { get; set; }
    }

在剃刀文件中,我有一个这样的 html:

@using (Html.BeginForm("Search", controllerName, FormMethod.Post, new { id = "fSearch" }))
        {
            @Html.HiddenFor(m => m.Query.PageIndex)
            @Html.HiddenFor(m => m.Query.PageSize)
            @Html.HiddenFor(m => m.Query.SortBy)
            ...etc
            @Html.TextBoxFor(m => m.Query.SerialNumber, null, new { @class = "inputbox right-search-field" })
        ...etc

我已经定义了一个动作如下:

[HttpPost]
        public virtual ActionResult Search(FormSearchQueryModel queryModel)
        {
            //Implementation ommited
        }

现在,问题是表单中的值确实已提交,但未绑定到操作中的“queryModel”参数。我可以在 Request.Form["Query.Something"] 中看到它们。

我不想提交整个模型,因为没有必要发布所有条目以及其他任何内容。是否可以让 MVC 绑定到嵌套属性,或者我是否坚持使用 Reqest.Form[""] ?

4

1 回答 1

0

您是否尝试Prefix如下设置属性,

[HttpPost]
public virtual ActionResult Search([Bind(Prefix="Query")]FormSearchQueryModel queryModel)
{
   //Implementation ommited
}

Bind属性具有其他属性,例如IncludeExclude您可以通过这些属性控制需要绑定的发布值。

于 2012-06-06T09:38:50.730 回答