当前位置: 首页 > 编程语言 > C#

如何使用Html.GetUnobtrusiveValidationAttributes()将

时间:2023-04-10 16:37:23 C#

分享到选择列表,他们的“修复”是将其包含在MVC4中,这对于使用MVC3的任何人来说都不是血腥的。我提出的解决方法是使用Html.GetUnobtrusiveValidationAttributes()自己添加它们,就像任何其他自定义属性一样,但我无法找出调用该方法的正确语法。有2个重载,一个接受一个字符串,另一个接受一个字符串和一个ModelMetaData类。我了解元数据参数,我想我只是传入ViewData.ModelMetadata但该字符串应该是什么?MSDN文档说它是“指定的HTML名称属性”,这对我来说毫无意义。什么是HTML名称属性?选择列表?它为什么需要它,它如何帮助它知道我想要验证我的模型的哪些属性?查看使用示例,它们似乎都在我的模型上传递属性名称,我想验证该属性,这是有道理的。不幸的是,无论我传递什么,我都无法获得返回任何空集合的方法。我的模型类称为Event,我的属性称为EventTypeID。我使用略有不同的视图模型类作为视图的基础,因为我需要显示事件列表并允许在同一视图中输入新事件,所以我有一个简单的视图模型类,如下所示:公共类EventViewModel{公共模型。事件NewEvent{get;放;}公共IEnumerable事件{得到;放;下拉列表映射到如下属性:@Html.DropDownListFor(model=>model.NewEvent.EventTypeID,我将什么作为字符串传递给Html.GetUnobtrusiveValidationAttributes(string)或Html.GetUnobtrusiveValidationAttributes(string,ModelMetadata)获取此属性的属性。我试过:Html.GetUnobtrusiveValidationAttributes("EventTypeID")Html.GetUnobtrusiveValidationAttributes("EventTypeID",ViewData"NewbutValidationMetadata)Html.Getes.EventTypeID")Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID",ModelMetadata)它们都返回一个空集合。我知道我的模型是正确的,因为如果我将调用从Html.DropDownListFor更改为Html.TextBoxFor然后验证“工作正常”,除了将验证属性添加到我的模型类之外,我不需要做任何其他事情。编辑:刚刚尝试关闭客户端验证,所有选择列表的服务器端验证工作正常。对于那些仍在寻找答案的人,这对我有用:publicstaticIDictionaryUnobtrusiveValidationAttributesFor(thisHtmlHelperhtml,Expression>propertyExpression){varmetadata=ModelMetadata.FromLambdaExpression(propertyExpression,html.ViewData);varattributes=html.GetUnobtrusiveValidationAttributes(propertyName,metadata);返回属性;请注意,我使用的是.NetMVC4,您在MVC3中没有html.NameFor方法。但是,我相信这可以在MVC3中使用:varpropertyName=ExpressionHelper.GetExpressionText(propertyExpression);您可以使用此内联来选择元素示例m.MyProperty)"id="@Html.IdFor(m=>m.MyProperty)"@Html.Raw(string.Join("",Html.GetUnobtrusiveValidationAttributes(Html.NameFor(m=>m.MyProperty).ToString()).Select(x=>x.Key.ToString()+"=""+x.Value+""")))>这是一个链接我发布的答案显示了我编写的一个HtmlHelper,用于为下拉菜单提供不显眼的验证:MVC3下拉列表验证不适用于复杂的视图模型更新您是否尝试在HtmlHelper中获取属性,或在视图中内联?假设您是试图在视图中获取属性,这就是问题所在。首先,您需要了解ModelMetadata并不代表整个模型中可用的单个对象。相反,它表示特定元素的元数据,无论它是您的模型还是模型上的任何属性。更好的描述性名称是ObjectMetadata,因为ModelMetadata是指定对象的元数据,无论它是模型、嵌套模型还是特定属性。视图中的ModelMetadata只是顶级模型的元数据。您必须获取下拉列表绑定到的属性的ModelMetadata。如果您使用帮助程序,则将向该帮助程序传递正确的模型元数据。如果你正在使用你的观点,你需要做一些体操来获得正确的ModelMetadata,例如我的回答:ValidatingandEditing"Changeable"/OptionalTypesinAsp.netMVC3以上是C#学习教程:Html.GetUnobtrusiveValidationAttributes()分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理会员删除。如需转载请注明出处: