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