首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC:当我手动访问Modelstate.AddModelError时不会突出显示Modelstate.AddModelError

ASP.NET MVC:当我手动访问Modelstate.AddModelError时不会突出显示Modelstate.AddModelError
EN

Stack Overflow用户
提问于 2010-08-10 14:11:38
回答 1查看 2.1K关注 0票数 2

假设我有这个财产

代码语言:javascript
复制
[Required(ErrorMessage = "Add this property")]
public string MyProperty {get; set;}

当我像这样使用模型绑定验证时

代码语言:javascript
复制
UpdateModel(myModel);

然后,当出现错误时,重新显示表单,表示MyProperty的文本框被高亮显示为(即红色边框和粉红色背景)。文本框旁边的Html.ValidateMessageFor()显示也是错误消息。

但是,当我手动做的时候,就像这样

代码语言:javascript
复制
if(string.NullOrEmpty(myModel.MyProperty))
  ModelState.AddModelError("MyProperty", "Custom message");

如果有错误,我仍然会收到错误消息。但是只有Html.ValidationSummary())在页面顶部显示错误列表。但是文本框不再高亮显示,Html.ValidateMessageFor()根本不显示任何内容。

有什么我能解决的吗?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-14 22:04:43

经过两天没有任何回答,我怀疑我没有以正确的方式问这个问题。那么,I asked differntly and got an answer.然后我会回答自己这个问题,以防有人有同样的问题。

当模型是合成的时候,整件事都是关于不加前缀的。例如,在我的例子中:

代码语言:javascript
复制
public class FormViewModel
{
  public OrganizationData organizationData { get; set; }
}

OrganizationData被定义为

代码语言:javascript
复制
public class OrganizationData
{
  public string OrganizationName { get; set; }
}

所以我应该这么做

代码语言:javascript
复制
if(string.NullOrEmpty(formViewModel.organizationData.OrganizationName))
   ModelState.AddModelError("organizationData.OrganizationName", "Name can't be empty")

但是,我省略了前缀 organizationData,而是使用了

代码语言:javascript
复制
ModelState.AddModelError("OrganizationName", "Name can't be empty")

在视图中,helper将检查ModelState,以确定是否存在与其键关联的错误。所以,如果那是cae,它会突出自己。在这种情况下,organizationData.OrganizationNameOrganizationName是不同的。这样文本框就不会突出显示自己。

还有一件事。我对TryUpdateModel()的体验并不相同,因为它不仅在内部使用了AddModelError(),而且还使用了一种算法,可以找到正确的键。

我想我上过课了。通过了解这个机制,我就能够解决其他一些悬而未决的问题。

感谢达林·季米特洛夫和伊恩·加洛韦。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3449861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档