2012-06-06 75 views
1

我有一個通用的「索引」頁面,其中列出了給定表的所有條目,並且有一個允許過濾網格中的數據的邊欄。我的模型如下:ASP.NET MVC:參數綁定到單個嵌套屬性

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 [「」]?

回答

0

你嘗試設置Prefix屬性如下,

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

Bind屬性其它屬性,如IncludeExclude通過它可以控制被張貼的值需要加以綁定。

+0

謝謝,但沒有幫助 – Matt

+0

你說問題是值不綁定到模型,這是因爲生成的元素名稱就像「Query.Something」,...默認情況下,模型綁定器檢查元素名稱與屬性名稱相同,並且由於在您的情況下它們以Query作爲前綴,所以必須在「綁定」中指定該名稱。如果不檢查視圖源並查看元素的名稱並相應地指定。 – VJAI

+0

我沒有說這是原因..我只提到他們確實被送回服務器,我知道這是因爲值在Request.Form對象中,名稱具有前綴「Query」。 「..我完全期望命名和它是正確的..我不明白爲什麼這些值不綁定到指定的參數類型。我只能看到兩種方法:使用Requst.Form或將整個父模型作爲參數傳遞..這可以工作,但正如我之前所說的......不需要將所有不必要的數據傳回 – Matt