Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC 3-RemoteAttribute覆盖有效,可以访问其他字段_.net_Asp.net Mvc 3_Validation - Fatal编程技术网

ASP.NET MVC 3-RemoteAttribute覆盖有效,可以访问其他字段

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

各位,我正在创建一个新属性,它来自System.Web.Mvc.RemoteAttribute。我想重写方法IsValid,因为在没有启用JavaScript的情况下验证也可以工作。但我不知道如何访问其他字段。我的代码是:

[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));}