s#arp lite: Странное сообщение об ошибке проверки "HasUniqueDomainSignature"

У меня есть 2 таблицы, стек и пользователь, и его много к одной.

           [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, проверка не удалась из-за пользователя, а не объекта стека. Я получаю сообщение "Этот адрес электронной почты уже существует", я не добавляю нового пользователя, просто назначаю пользователя стеку. Я должен получить "Этот стек уже существует"

    [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 ответ

Вот пара вещей, которые привлекли мое внимание:

  • Используйте отладчик во время поста обратно. Что такое свойство пользователя стека? Это ноль или у него есть значение? Если оно имеет значение, есть ли поле в представлении, которое заполняет его значением; например,? (Если значение равно null, мне интересно, почему проверка пользователя отключена... это может означать ошибку в SharpLiteModelBinder.)
  • Хотя у вас есть электронная почта как [DomainSignature], вы также намеревались иметь валидатор [NotNullNotEmpty]? Т.е. нормально ли для пользователя иметь пустое электронное письмо?

В связи с этим есть новая группа обсуждения Google Group для S#arp Lite по адресу http://groups.google.com/group/sharp-lite

Другие вопросы по тегам