Asp.net mvc ASP MVC视图在为空时不显示更新的数据

Asp.net mvc ASP MVC视图在为空时不显示更新的数据,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,在我的ASP MVC 3站点中,当用户从生产者类型下拉框中选择独资企业的值时,由DSS Specific名称设置的字段内的所有值都将为空,并在重新呈现视图时不再显示 在单步执行代码时,我可以看到,在用户点击保存后,模型对象正确评估生产者类型,将相应字段设置为空,当视图被渲染时,我可以看到模型对象中的字段实际上是null它们需要的位置 但是,该视图仍然显示在点击保存之前字段中的值,尽管传递给它的对象包含这些字段的null值,该视图仍然显示这些值。我还多次点击“刷新”,以确保页面不只是缓存在浏览器中

在我的ASP MVC 3站点中,当用户从
生产者类型
下拉框中选择
独资企业
的值时,由
DSS Specific
名称设置的字段内的所有值都将为空,并在重新呈现视图时不再显示

在单步执行代码时,我可以看到,在用户点击
保存
后,模型对象正确评估
生产者类型
,将相应字段设置为
,当视图被渲染时,我可以看到
模型
对象中的字段实际上是
null
它们需要的位置

但是,该视图仍然显示在点击
保存
之前字段中的值,尽管传递给它的对象包含这些字段的
null
值,该视图仍然显示这些值。我还多次点击“刷新”,以确保页面不只是缓存在浏览器中

控制器

当模型对象第一次传回控制器时,它通过名为
ReformatFields

    [HttpPost]
    public ActionResult Edit(Monet.Models.AgentTransmission agenttransmission)
    {
        //redirect if security is not met.  
        if (!Security.IsModifier(User)) return RedirectToAction("Message", "Home", new { id = 1 });

        //Tax Id security
        ViewBag.FullSSN = Security.IsFullSsn(User);

        try
        {
            agenttransmission = AgentTransmissionValidator.ReformatFields(agenttransmission);
这是
ReformatFields
中的代码,用于确定是否将特定字段置零。然后将模型对象分配回控制器中上面的
agenttransmission
对象

        //TODO:  blank out DSS specific fields if not a sole proprietor!
        if (!agt.ProducerType.Equals("S") || !agt.DRMrole.Equals("Sole Proprietor"))
        {
            agt.C8CharAgentCAB0State = null;
            agt.C8CharAgentCAB0MktDiv = null;
            agt.CONCode = null;
            agt.BundleCode = null;
            agt.LifeRegion = null;
            agt.LifeField = null;
            agt.AGYMGMT = null;
            agt.INDSGC = null;
            agt.PENSGC = null;
            agt.GRPSGC = null;
            agt.LMKSGC = null;
            agt.LDT = null;
            agt.GCASBNS = null;
            agt.GCOMMSN = null;
            agt.GPROFBN = null;
            agt.INDSplits = null;
            agt.DSTSGC = null;
            agt.ANNCommCode = null;
            agt.LifeEAPercent = null;
            agt.VARPercent = null;
            agt.OwnerMaster = null;
            agt.LifeMaster = null;
            agt.CampaignMaster = null;
            agt.RelationshipEffDate = null;
            agt.RelationshipDistCode = null;
        }
        return agt;
    }
保存后,
agenttransmission
model对象将被发送回视图

                db.SaveChanges();
                DisplayPrep();
                agenttransmission.displayChannel = getDisplayChannel(agenttransmission);
                agenttransmission.FormattedReferenceNumber =
                    ReferenceConversion.UnobAndFormat(agenttransmission.ReferenceNumber, "S");
                return View(agenttransmission);
            }
查看

从下面的屏幕截图中可以看到,对于
CONCode
BundleCode
,传递回视图的
Model
对象的值为
null

但是,页面呈现的值与以前相同

这不是页面缓存值的问题,正如您在这里看到的,HTML实际上是用这些值呈现的

下面是这两个字段视图中的实际代码

    <div class="M-editor-label">
        @Html.LabelFor(model => model.CONCode)
    </div>
    <div class="M-editor-field">
        @Html.TextBoxFor(model => model.CONCode, new { maxlength = 2 })
        @Html.ValidationMessageFor(model => model.CONCode)
    </div>

    <div class="M-editor-label">
        @Html.LabelFor(model => model.BundleCode)
    </div>
    <div class="M-editor-field">
        @Html.TextBoxFor(model => model.BundleCode, new { maxlength = 6 })
    </div>

@LabelFor(model=>model.CONCode)
@TextBoxFor(model=>model.CONCode,新的{maxlength=2})
@Html.ValidationMessageFor(model=>model.CONCode)
@LabelFor(model=>model.BundleCode)
@Html.TextBoxFor(model=>model.BundleCode,新的{maxlength=6})

我意识到这是一个复杂的过程,所以如果我遗漏了任何你认为有用的东西,请告诉我。谢谢大家!

进行POST时,所有数据都存储在
ModelState
中。将模型中的属性设置为null,然后在视图中返回该模型不会使它们在视图中空白,因为它们仍然处于
ModelState
。您可以重定向到GET操作并以另一种方式持久化此数据,也可以清除ModelState:

ModelState.Clear();
Html帮助程序(如
@Html.TextBoxFor
)正在从ModelState而不是直接从模型类中提取数据,这就是为什么即使将值设置为null,这些值仍会出现的原因