繁体   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