C# 隐藏输入c中的值错误#

C# 隐藏输入c中的值错误#,c#,razor,html-helper,C#,Razor,Html Helper,我有模型属性int?案例ID 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)

我有模型属性
int?案例ID

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
@Html.HiddenFor(x=>x.CaseId)=>0
@Html.Hidden(“CaseId”,Model.CaseId)=>0
@Html.Hidden(“qwe”,Model.CaseId)=>实际值
=>实际值
在浏览器中,我看到以下内容:

<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=“字段CaseId必须是一个数字。”
出于一些我无法理解的原因。

这与
ModelState
有关。据此:

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


现在在本例中:
@Html.HiddenFor(x=>x.CaseId,new{Value=@Model.CaseId})
,因为您要为当前的
模型
显式定义一个值,所以它会显示您期望的值。您可以使用
ModelState.Clear()在您的
控制器中
后,在表单上发布
,以重置模型值。

请向我们显示视图代码和生成的匹配HTML(从浏览器查看源代码)。请说明哪个是哪个。还请向我们显示
模型
类型的类代码。向我们显示从何处呈现HTML的代码(此视图返回模型的方法)。我猜您正在从控制器以0的形式传递CaseId值。不,我传递值!=0或null@A.Gladkiy对于
HiddenFor
@Html.HiddenFor(x=>x.CaseId,新的{Value=@Model.CaseId})