2012-01-06 50 views
0

我有2个表,堆栈和用户,它的多对一。s#arp lite:奇怪的“HasUniqueDomainSignature”验证错误消息

  [HasUniqueDomainSignature(ErrorMessage = "This stack already exists")] 
      public class Stack : Entity 
      { 
       [DomainSignature] 
       public virtual string Title { get; set; } 
       public virtual User PostBy { get; set; } 
      } 



      [HasUniqueDomainSignature(ErrorMessage="This email address already exists")] 
      public class User : Entity 
      { 
       [DomainSignature] 
       public virtual string Email { get; set; } 

       public User() 
       { 
        this.Stacks = new List<Stack>(); 
       } 
      } 

这是我的代码添加堆栈。如果我添加一个具有独特标题的堆栈,一切正常,没有问题。我在数据库中添加了一个标题已经存在的新堆栈,验证失败,我检查了ModelState,因为User而不是Stack对象的validaiton faild。我得到“此电子邮件地址已存在”,我不添加新的用户,只是将用户分配到堆栈。我应该得到“该协议栈已存在”

[Authorize] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Add(Stack stack) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = _userRepository.GetAll().Where(u => u.Email == HttpContext.User.Identity.Name).SingleOrDefault(); 

      if (user == null) 
       throw new ArgumentNullException("User cannot be found, please re-login."); 

      stack.PostDate = DateTime.Now; 
      stack.PostBy = user; 

      ActionConfirmation<Stack> confirmation = _stackCudTasks.SaveOrUpdate(stack); 

      if (confirmation.WasSuccessful) 
      { 
       TempData["message"] = confirmation.Message; 
       return RedirectToAction("Index"); 
      } 

      ViewBag["message"] = confirmation.Message; 
     } 

     return View(_stackCudTasks.CreateEditViewModel(stack)); 

    } 

回答

0

这里有两件事情引起我的注意:

  • 使用回发时的调试器。什么是“堆栈”的用户属性?它是空的还是它有价值?如果它有一个值,视图中是否存在一个填充值的字段;例如? (如果它是空的,我想知道为什么用户的验证被触发......这可能意味着在SharpLiteModelBinder中的一个错误。)
  • 虽然你有电子邮件作为[DomainSignature],你是否也打算有一个[NotNullNotEmpty]验证器?也就是说,用户有空电子邮件可以吗?

在一个相关的说明,还有专为S#ARP精简版在http://groups.google.com/group/sharp-lite

+0

感谢您的帮助了新的谷歌小组讨论小组。我在那里发布我的问题与所有的源代码。该邮件被标记为[必需(ErrorMessage =“电子邮件是必需的”)]。如果用户有什么问题,为什么当我输入一个唯一的标题时,一切正常,用户对象仍然与我输入重复标题相同。我在github上上传我的整个应用程序,并在sharp lite谷歌组上重新发布我的问题。 http://groups.google.com/group/sharp-lite/browse_thread/thread/27cb231e48cd2b49 – qinking126 2012-01-07 16:30:01