Asp.net mvc ASP MVC视图在为空时不显示更新的数据
在我的ASP MVC 3站点中,当用户从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值,该视图仍然显示这些值。我还多次点击“刷新”,以确保页面不只是缓存在浏览器中
生产者类型
下拉框中选择独资企业
的值时,由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,这些值仍会出现的原因