ASP.NET MVC 3-RemoteAttribute覆盖有效,可以访问其他字段
各位,我正在创建一个新属性,它来自System.Web.Mvc.RemoteAttribute。我想重写方法IsValid,因为在没有启用JavaScript的情况下验证也可以工作。但我不知道如何访问其他字段。我的代码是:ASP.NET MVC 3-RemoteAttribute覆盖有效,可以访问其他字段,.net,asp.net-mvc-3,validation,.net,Asp.net Mvc 3,Validation,各位,我正在创建一个新属性,它来自System.Web.Mvc.RemoteAttribute。我想重写方法IsValid,因为在没有启用JavaScript的情况下验证也可以工作。但我不知道如何访问其他字段。我的代码是: [AttributeUsage(AttributeTargets.Property)] public class DocumentationAttribute : System.Web.Mvc.RemoteAttribute { public Documentatio
[AttributeUsage(AttributeTargets.Property)]
public class DocumentationAttribute : System.Web.Mvc.RemoteAttribute
{
public DocumentationAttribute()
: base("ValidPass", "Validation")
{
base.HttpMethod = "Post";
}
private DocumentationAttribute(string routeName)
: base(routeName)
{
}
private DocumentationAttribute(string action, string controller)
: base(action, controller)
{
}
private DocumentationAttribute(string action, string controller, string areaName)
: base(action, controller, areaName)
{
}
public override bool IsValid(object value)
{
//How can i access to the additional fields?
}}
类别模型:
[Display(Name = "Passport")]
[Documentation(ErrorMessage = "{0} not valid", AdditionalFields = "IDPass")]
public virtual String Passport
{
set;
get;
}
没有javascript,无法进行远程验证。这就是它的工作原理。您也可以只依赖服务器端验证,因为这是唯一一种不使用javascript的验证 您是否正在尝试创建一个远程使用javascript的验证器,但如果禁用javascript,服务器端是否会这样做?如果是这样,那么您应该创建一个从ValidationAttribute派生的自定义属性,并使用remote 特别是对于您的问题,您需要在属性中创建一个名为AdditionalFields的公共属性,在声明属性时在初始值设定项中设置该属性,然后您可以从IsValid访问该属性 编辑: 根据您的附加信息,您需要使用第二种形式的IsValid,它接受验证上下文。您可以这样做:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var fields = validationContext.ObjectType.GetProperty(this.AdditionalFields);
var fieldsValue = (string)fields.GetValue(validationContext.ObjectInstance, null);
}
谢谢你的回复。我是新手,所以我不知道什么是最好的选择。我的应用程序必须是可访问的,并且我希望验证用户的id号。我在一个库c中有用于此验证的函数。我想实现两种类型的验证:客户端或服务器。那么,我是否选择了使用remoteattribute进行验证的最佳选项?我不明白你说的创建从ValidationAttribute派生的自定义属性并使用remote是什么意思。。。你很乐意发送一个示例代码吗?关于remoteattribute,我已经尝试了你的解决方案,但是我只能得到字段的名称,而不能得到值。我的模型有一个带有metada和信息的实体POCO以及一些SelectList对象。因此,我需要在调用远程验证的控制器的操作中使用前缀。我希望你能理解我:)谢谢你<代码>[HttpPost]公共操作结果有效类([Bind(Prefix=“requictud.DocIdentidad”)]string DocIdentidad[Bind(Prefix=“requictud.IdTipoDocIdentidad”)]int?IdTipoDocIdentidad){if(string.IsNullOrEmpty(DocIdentidad)| |!IdTipoDocIdentidad.HasValue){返回Json(false)}返回Json(Validaciones.IsValidoNIFNIE(DocIdentidad,(Enumerados.TipoDocumentacion)IdTipoDocIdentidad));}