Asp.net-Mvc-2

為什麼 mvc Html.HiddenFor 不呈現我的欄位?

  • November 15, 2018

我正在嘗試做這個簡單的事情

<%= Html.HiddenFor(model => model.Id)%>

模型是

[HiddenInput(DisplayValue=true)]
public int Id { get; set; }

但我總是得到這個渲染

<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id">

我檢查過,id 不是 0 ..?!

這裡需要一些解釋…

編輯

問題似乎是下面提到的文章。這是有效的

<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" />

感謝馬納夫

我不確定您是否是這種情況,但是Html.HiddenFor()“如果在發布期間更改了值,則在發布後不輸出正確的值”。這不是這樣設計的錯誤。

快速解決 :

不要使用助手,試試這個:

<input type="hidden" value="<%= Html.AttributeEncode(model.Id) %>" id="Id" name="Id" />

一直為我工作:)

添加到 Manaf 的正確答案 - 您正確地註意到問題發生在處理文章的控制器操作中。當我將模型顯式傳遞給視圖時,我在處理 get 的控制器操作中遇到了同樣的問題:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
   searchForm.MyId = SomeValueFromSession;
   return View("SearchForSomething", searchForm);
}

在視圖中,為 MyId 呈現隱藏輸入的這條線始終呈現為“0”:

@Html.HiddenFor(m => m.MyId);

根據 Darren Oster 的建議,我更改為以下內容並解決了問題:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
   searchForm.MyId = SomeValueFromSession;
   ModelState.Clear();
   return View("SearchForSomething", searchForm);
}

引用自:https://stackoverflow.com/questions/3606087