假设我有这个财产
[Required(ErrorMessage = "Add this property")]
public string MyProperty {get; set;}当我像这样使用模型绑定验证时
UpdateModel(myModel);然后,当出现错误时,重新显示表单,表示MyProperty的文本框被高亮显示为(即红色边框和粉红色背景)。文本框旁边的Html.ValidateMessageFor()显示也是错误消息。
但是,当我手动做的时候,就像这样
if(string.NullOrEmpty(myModel.MyProperty))
ModelState.AddModelError("MyProperty", "Custom message");如果有错误,我仍然会收到错误消息。但是只有Html.ValidationSummary())在页面顶部显示错误列表。但是文本框不再高亮显示,Html.ValidateMessageFor()根本不显示任何内容。
有什么我能解决的吗?
谢谢你的帮助。
发布于 2010-08-14 22:04:43
经过两天没有任何回答,我怀疑我没有以正确的方式问这个问题。那么,I asked differntly and got an answer.然后我会回答自己这个问题,以防有人有同样的问题。
当模型是合成的时候,整件事都是关于不加前缀的。例如,在我的例子中:
public class FormViewModel
{
public OrganizationData organizationData { get; set; }
}OrganizationData被定义为
public class OrganizationData
{
public string OrganizationName { get; set; }
}所以我应该这么做
if(string.NullOrEmpty(formViewModel.organizationData.OrganizationName))
ModelState.AddModelError("organizationData.OrganizationName", "Name can't be empty")但是,我省略了前缀 organizationData,而是使用了
ModelState.AddModelError("OrganizationName", "Name can't be empty")在视图中,helper将检查ModelState,以确定是否存在与其键关联的错误。所以,如果那是cae,它会突出自己。在这种情况下,organizationData.OrganizationName和OrganizationName是不同的。这样文本框就不会突出显示自己。
还有一件事。我对TryUpdateModel()的体验并不相同,因为它不仅在内部使用了AddModelError(),而且还使用了一种算法,可以找到正确的键。
我想我上过课了。通过了解这个机制,我就能够解决其他一些悬而未决的问题。
感谢达林·季米特洛夫和伊恩·加洛韦。
https://stackoverflow.com/questions/3449861
复制相似问题