s#arp lite:奇怪的“HasUniqueDomainSignature”验证错误消息

时间:2012-01-06 04:41:40

标签: s#arp-architecture s#arp

我有2个表,Stack和User,以及它的多对一表。

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

    }

1 个答案:

答案 0 :(得分:0)

以下是引起我注意的一些事情:

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

在相关说明中,http://groups.google.com/group/sharp-lite有一个针对S#arp Lite的新Google论坛讨论组