我正在尝试浏览ASP.Net MVC 1.0中的NerdDinner示例章节,我遇到了一个错误。在我到达需要编辑晚餐的部分之前,所有东西都是笨拙的。我从项目的创建到现在一直跟着指导,直到这一点(至少我能说的最好)。但是,当我在 NerdDinnerDataContext 对象上调用 SubmitChanges 方法时,我得到一个例外情况:
规则违规会阻止保存
我没有注意到我的代码与最终项目中的代码之间存在任何差异(除了一些我还没有添加的其他功能,显然)。基本上,我不知道如何在此时对此错误进行故障排除。我试图在网上寻找一些答案,没有运气。
以下是我项目中的一些代码片段,但我不确定它们会有多好。
来自我的DinnerRepository类的:
private NerdDinnerDataContext db = new NerdDinnerDataContext();
...
public void Save()
{
db.SubmitChanges();
}
来自DinnersController的
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
// Retrieve existing dinner
Dinner dinner = dinnerRepository.GetDinner(id);
// Update dinner with form posted values
dinner.Title = Request.Form["Title"];
dinner.Description = Request.Form["Description"];
dinner.EventDate = DateTime.Parse(Request.Form["EventDate"]);
dinner.Address = Request.Form["Address"];
dinner.Country = Request.Form["Country"];
dinner.ContactPhone = Request.Form["ContactPhone"];
// Persist changes back to database
dinnerRepository.Save();
// Perform HTTP redirect to details page for the saved Dinner
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
这是我的第一个问题,所以如果不是那么好我会道歉。
答案 0 :(得分:8)
RuleViolations是NerdDinners创建者Scott Hanselman决定封装业务逻辑的方式。
他将Linq To SQL类分开,并添加了一个名为GetRuleViolations()的函数,这是他添加所有业务规则的地方。看看那个方法,看看发生了什么。
答案 1 :(得分:3)
我遇到了像atcrawford一样的问题,但是对于Giovanni而言,我设法解决了这个问题。 首先,当我开始本教程时,我使用一些随机数字从数据库填充电话号码。 现在,当我尝试编辑现有数据时,我收到了“规则违规”,因为电话号码的格式不正确。 请查看Dinner.cs上的Models文件夹:
public IEnumerable<RuleViolation> GetRuleViolations()
{//if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
// yield return new RuleViolation("Phone# does not match country", "ContactPhone");
}
你可以看到我注释了那一行,所以永远不会调用PhoneValidator类的IsValidNumber方法。
或者,您可以根据PhoneValidator
中的正则表达式输入电话号码的数据答案 2 :(得分:0)
有关设置书呆子晚餐的更多信息,请务必查看ASP.NET MVC 1.0书籍和免费的第一章。
您提到的网站上有链接。这又是http://tinyurl.com/aspnetmvc