上面的类中的MVC远程验证访问字段

时间:2012-06-07 14:02:58

标签: asp.net-mvc asp.net-mvc-3

在下面的代码中,我无法将用户名传递给远程验证函数:

public string UserName { get; set; }

public class Numbers
{


            [Display(Name = "Additonal Numbers")]
            [Remote("NumberExists", "Account", AdditionalFields = "UserName", ErrorMessage = "Serial is already taken.")]
            public string additionalNumbers { get; set; }
 }


public List<Numbers> NumberList { get; set; }

这是一个简单的例子,但我想在列表中传递来自同一模型的其他字段,但我似乎无法访问公共类范围之外的任何内容。

我是否需要以某种方式将模型的其余部分传递到列表中以实现此目的,或者我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

远程验证属性中的AdditionalFields参数需要与要验证的对象位于同一个类中。

.. ..编辑

public class Numbers
{

            public string UserName { get; set; }

            [Display(Name = "Additonal Numbers")]
            [Remote("NumberExists", "Account", AdditionalFields = "UserName", ErrorMessage = "Serial is already taken.")]
            public string additionalNumbers { get; set; }
 }

..评论后编辑.. 看起来您想要做的是验证所有数字对于用户名是唯一的。试试这个:

public string UserName { get; set; }

[Display(Name = "Additonal Numbers")]
[Remote("NumberExists", "Account", AdditionalFields = "UserName", ErrorMessage = "Serial is already taken.")]
public List<String> NumberList { get; set; }

在NumberExists Action中,选择一个字符串列表而不是一个字符串。这样您就可以一次验证整个数组。

Public ActionResult NumberExists(List<String> NumberList, String UserName){
    //Validate list is unique for username
}

答案 1 :(得分:0)

UserName属性应与additionalNumbers属性的同一类:

public class NumbersViewModel
{
   public string UserName { get; set; }

   [Display(Name = "Additonal Numbers")]
   [Remote("NumberExists", "Account", AdditionalFields = "UserName", ErrorMessage = "Serial is already taken.")]
   public string additionalNumbers { get; set; }

   public List<Numbers> NumberList { get; set; }
}