s # arp lite: Странное сообщение об ошибке проверки «HasUniqueDomainSignature» - PullRequest
0 голосов
/ 06 января 2012

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

    [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 голосов
/ 06 января 2012

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

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

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

...