[英]wrong value in hidden input Razor c#
我有模型屬性int? CaseId
int? CaseId
public class TaskDetailsVm
{
public TaskDetailsVm(Task task)
{
CaseId = task.CaseID;
}
public int? CaseId { get; set; }
}
並在視圖中:
@Html.HiddenFor(x => x.CaseId) => 0
@Html.Hidden("CaseId", Model.CaseId) => 0
@Html.Hidden("qwe", Model.CaseId) => real value
<input type="hidden" id="CaseId" name="CaseId" value="@Model.CaseId" /> => real value
在瀏覽器中我看到這個:
<input data-val="true" data-val-number="The field CaseId must be a number." id="CaseId" name="CaseId" type="hidden" value="0">
<input id="CaseId" name="CaseId" type="hidden" value="0">
<input id="qwe" name="qwe" type="hidden" value="22906">
<input type="hidden" id="CaseId" name="CaseId" value="22906">
為什么我可以看到以下內容? 我沒有看到任何腳本來覆蓋這個值。 我該如何解決? 同樣對於第一行代碼,我看到了額外的屬性data-val="true"
和data-val-number="The field CaseId must be a number."
出於某些我無法理解的原因。
這與ModelState
。 根據這篇文章:
ASP.NET MVC 假定,如果您正在呈現視圖以響應 HTTP POST,並且您正在使用 Html 幫助程序,那么您很可能會重新顯示驗證失敗的表單。 因此,Html Helpers 在查看模型之前實際上會檢查 ModelState 以獲取要顯示在字段中的值。 這使他們能夠重新顯示用戶輸入的錯誤數據,並在需要時顯示匹配的錯誤消息。 由於我們的 [HttpPost] Index 重載依賴於模型綁定來解析 POST 數據,因此 ModelState 已自動填充了字段的值。 在我們的動作中,我們更改了模型數據(不是 ModelState),但是 Html 助手(即 Html.Hidden 和 Html.TextBox)首先檢查 ModelState ……因此顯示由動作接收到的值,而不是我們修改的值。
現在在這種情況下: @Html.HiddenFor(x => x.CaseId, new {Value = @Model.CaseId})
,因為您明確定義了當前Model
的值,它顯示您期望的值。 您可以使用ModelState.Clear();
在表單上POST
后在您的Controller
中重置模型值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.