C# 值在视图中不显示为已填充

C# 值在视图中不显示为已填充,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我这里有个奇怪的问题 在Model.cs中: public long? ContactoAdditionalId { get; set; } public long Test1 { get; set; } public long? Test2 { get; set; } public string Test3 { get; set; } 在操作结束时视图前的控制器中: [HttpPost] [AllowAnonymous] public

我这里有个奇怪的问题

在Model.cs中:

    public long? ContactoAdditionalId { get; set; }
    public long Test1 { get; set; }
    public long? Test2 { get; set; }
    public string Test3 { get; set; }
在操作结束时视图前的控制器中:

    [HttpPost]
    [AllowAnonymous]
    public ActionResult Index( Contacto model )
    {
        DoSomeStuff( model, ... );

        (...)

        model.Test1 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value : -1;
        model.Test2 = model.ContactoAdditionalId;
        model.Test3 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value.ToString() : "No value!";
        return View( model );
    }
最后在View.cshtml中:

@using MyApp.Models;

@model Contacto

@using ( Html.BeginForm( "Index", "Contacto" ) )
{
    @Html.HiddenFor( model => model.ContactoAdditionalId )
    @Html.HiddenFor( model => model.Test1 )
    @Html.HiddenFor( model => model.Test2 )
    @Html.HiddenFor( model => model.Test3 )
    (...)
正如您可能已经猜到的,我留下的ContactOaditionAlid带有真实姓名,以防问题值没有出现在视图中

当我在Chrome中按F12打开开发者工具并检查HTML时,ContactOaditionAlid没有值,但有Test1、Test2和Test3的值

注意我用了一个长的,一个长的?和一个字符串来检查问题是否与类型有关,但这三个字符串都在HTML中显示值

当然,这个隐藏字段的目的是在发布时恢复ContactOaditionAlid。这样它就不工作了,它的model属性为null

我还注意到一些奇怪的事情:如果我在视图中添加,就在HiddenFor之前:

@Html.DisplayFor( model => model.ContactoAdditionalId, ... )
它突然起作用了,现在隐藏的字段有了它的价值


这里发生了什么?我在Visual Studio 2017中一步一步地运行调试,当我完成操作代码时,它开始在cshtml视图中进行调试,因此据我所知,没有其他代码,至少我们的项目代码不是在操作之后、视图转换为HTML之前执行的。

在ModelState中,您可能有一个参数与未看到数据的参数同名。如果要在模型中更改该值,而没有将其从ModelState中清除,HiddenFor将首先选择ModelState字段。执行ModelState.Clear操作,或仅删除ModelState.remove ContactoAdditionalId字段


另外,您可以使用ModelState.Clear。

您可以发布控制器和视图中的完整代码吗?您需要向我们显示更多详细信息,但我假设您在方法中有ContactOaditionAlid的参数,在这种情况下,它与ModelState有关,请参考一个解释,该解释将有大量代码需要复制粘贴,我担心NDA违规,但让我检查您的问题。我将评论控制器并查看我认为与问题无关的代码,并检查问题是否继续存在;如果是这样的话,复制粘贴的次数会减少,NDA.Done的次数也会减少。操作方法只有POST之后传递的模型。但是请注意,问题发生在从一个操作转到另一个视图之后的视图中。正如您所看到的,属性在操作结束时被填充,它成功地填充了Test1、Test2和Test3,但是在呈现的HTML中,我看到ContactOaditionAlid没有被填充,但是Test1、Test2和Test3被填充。