簡體   English   中英

隱藏輸入 Razor c# 中的錯誤值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM