【问题标题】:wrong value in hidden input Razor c#隐藏输入 Razor c# 中的错误值
【发布时间】:2019-07-17 09:57:01
【问题描述】:

我有模型属性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."

【问题讨论】:

  • 请向我们展示查看代码和生成的匹配 HTML(从浏览器查看源代码)。请明确哪个是哪个。
  • 请告诉我们Model类型的类代码。
  • 向我们展示您渲染 HTML 的代码(返回此视图模型的方法)。我猜你是从控制器传递 CaseId 值为 0 的。
  • 不,我传递值!= 0 或 null
  • @A.Gladkiy For HiddenFor: @Html.HiddenFor(x =&gt; x.CaseId, new {Value = @Model.CaseId})

标签: c# razor html-helper


【解决方案1】:

这与ModelState 有关。按照这个article

ASP.NET MVC 假定如果您正在呈现一个视图以响应 HTTP POST,并且您正在使用 Html 帮助程序,那么您很可能会重新显示一个验证失败的表单。因此,Html Helpers 在查看 Model 之前实际上会在 ModelState 中检查要在字段中显示的值。这使他们能够重新显示用户输入的错误数据,并在需要时显示匹配的错误消息。由于我们的 [HttpPost] 重载 Index 依赖于模型绑定来解析 POST 数据,因此 ModelState 已自动填充字段的值。在我们的操作中,我们更改了模型数据(不是 ModelState),但是 Html 帮助程序(即 Html.Hidden 和 Html.TextBox)首先检查 ModelState……因此显示操作接收到的值,而不是我们修改的值。

现在在这种情况下:@Html.HiddenFor(x =&gt; x.CaseId, new {Value = @Model.CaseId}),因为您正在为当前的Model 显式定义一个值,它会显示您期望的值。您可以在表单上的POST 之后的Controller 中使用ModelState.Clear(); 来重置模型值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 2013-11-17
    • 2013-08-18
    • 2021-03-23
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多