我有这个ViewModel
public class CustomerSuscribeViewModel : IValidatableObject
{
[DataMember(IsRequired = true)]
[DataType(DataType.Text)]
public string Name { get; set; }
public string SurName { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Inject]
public IDataUsers DataUsers { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(DataUsers.Get(new UserFilter() {Email = Email}).Any())
{
yield return new ValidationResult(This Email is already used.",new string[]{"Email"});
}
if(ConfirmPassword != Password)
yield return new ValidationResult("Please confirm your apssword", new string[] { "Password", "ConfirmPassword" });
}
}这个动作
[HttpPost]
public ActionResult Suscribe(CustomerSuscribeViewModel customer)
{
if (!ModelState.IsValid)
return View(customer);问题是从来没有创建过成员DataUsers,所以我得到了一个NullReferenceException。
绑定通过以下方式完成:
Bind<IDataUsers>().To<DataUsers>();有什么想法吗?
编辑: InjectAttribute对于我的控制器中的属性工作得很好。
环境: asp.net MVC3,Inject2.2(也许我需要更新?)
发布于 2012-06-15 21:38:01
视图模型不是由Ninject创建的,因此inject属性被忽略。通常,视图模型应该保持简单,并且没有依赖关系。您可以使用ValidationAttributes而不是IValidatableObject来达到此目的。
有关验证属性的注入,请阅读https://github.com/ninject/ninject.web.mvc/wiki/Injection-of-validators。
以下是如何使用ValidationAttribute实现密码与确认密码匹配的验证的示例
https://stackoverflow.com/questions/11050557
复制相似问题