2011-07-06 183 views
0

的名字,我很奇怪,爲什麼下面的代碼:指定下拉列表asp.net MVC3剃刀

@Html.DropDownList("Classification.Nationality.NationalityId", Model.Nationalities, new { @size = 10, @style = "display:none;", @class = "pickList" }) 

產生以下HTML,具體爲什麼元素的名稱不是「Classification.Nationality.NationalityId」。

<select style="display: none;" size="10" name="CollectionCategory.Classification.Nationality.NationalityId" id="CollectionCategory_Classification_Nationality_NationalityId" class="pickList"> 

在函數簽名肯定是這樣的:

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes); 

好像通過視圖的父視圖的模型重寫的名稱參數GOTS。 (這是部分視圖)。這對任何人都有意義嗎?

回答

0

這是因爲您在編輯器模板內部調用此幫助器,或者部分調用CollectionCategory導航屬性。這是非常正常的行爲,並確保在綁定時將適當的值發送給控制器操作。另外我想用這個幫手的強類型版本,以避免那些重構不友好魔術字符串建議您:

@Html.DropDownListFor(
    x => x.Classification.Nationality.NationalityId, 
    Model.Nationalities, 
    new { 
     @size = 10, 
     @style = "display:none;", 
     @class = "pickList" 
    } 
) 

當然,如果你不想遵循約定(不知道你爲什麼不),但你可以在您的POST操作中指定綁定前綴:

[HttpPost] 
public ActionResult Foo([Bind(Prefix = "CollectionCategory")] ClassificationViewModel model) 
{ 
    ... 
} 
+0

我已經開始沿着這些路線。問題在於,這是一個具有JavaScript功能的重用組件,因此組件的ID對客戶端腳本非常重要。我想可以在視圖模型上有一個屬性,比如「ModelPrefix」或其他的東西來處理這個問題。你已經回答了我的問題,爲什麼會發生這種情況。謝謝。 – voam