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