2011-09-09 45 views
4

我花了一個小時試圖弄清楚爲什麼我隱藏字段中的值與我期望的值不同。作爲最後的努力,我將它切換到一個隱藏的領域,它開始渲染,我期待。爲什麼會發生?input type =「hidden」vs htmlhelper奇怪的問題

某些情況下,使用htmlhelper的ID所使用的ID與查詢字符串ID參數中的ID相同。

// renders 123 
    @using (Html.BeginForm()){ 
     <input type="hidden" name="id" value="@Model.ID" /> 
    } 

VS

// renders 456 
@using (Html.BeginForm()){ 
     @Html.Hidden("id", Model.ID) 
} 

回答

1

我相信這是MVC的命名約定的一部分。這發生在我身上,因爲我的模型的屬性之一是「標題」,它與ViewBag.Title衝突。它開始顯示ViewBag.Title而不是實際的模型標題。

我相信只有當您在HtmlHelper中明確聲明「Model.ID」時纔會發生這種情況。它查看屬性名稱「ID」,然後查看ViewContext並查找查詢字符串「ID」並使用它。

它不使用不使用HtmlHelper的查詢字符串「ID」,因爲它沒有通過ViewContext查找該名稱;它只是放在模型的任何價值。 HtmlHelpers通常會查看ViewContext,並根據屬性名稱找出要使用的值,而不是確切來自何處。

如果你想使用的HtmlHelper,試試這個,看看它做什麼:

@Html.HiddenFor(model => model.ID)