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