我正在浏览NerDinner免费教程http://nerddinnerbook.s3.amazonaws.com/Intro.htm
我在步骤5的某个地方提到,为了使代码更简洁,我们可以创建一个扩展方法。我看了一下完整的代码,它使用了扩展方法:
catch
{
ModelState.AddModelErrors(dinner.GetRuleViolations());
return View(new DinnerFormViewModel(dinner));
}然后这是扩展方法的定义。
namespace NerdDinner.Helpers {
public static class ModelStateHelpers {
public static void AddModelErrors(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) {
foreach (RuleViolation issue in errors) {
modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
}
}
}我尝试按照教程中所说的以及代码所包含的内容进行操作,但是收到预期的错误,即没有只接受1个参数的AddModelErrors方法。
很明显,我遗漏了一些非常重要的东西。那是什么?
发布于 2009-06-30 02:04:51
您需要包含helpers引用;
using NerdDinner.Helpers;和
using NerdDinner.Models;然后检查是否有效并添加错误;
if (!dinner.IsValid)
{
ModelState.AddModelErrors(dinner.GetRuleViolations());
return View(dinner);
}你还必须为你的晚餐准备一个部分课程;
public partial class Dinner
{
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
if (String.IsNullOrEmpty( SomeField ))
yield return new RuleViolation("Field value text is required", "SomeField");
}
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}不要忘记RuleViolation类;
public class RuleViolation
{
public string ErrorMessage { get; private set; }
public string PropertyName { get; private set; }
public RuleViolation(string errorMessage)
{
ErrorMessage = errorMessage;
}
public RuleViolation(string errorMessage, string propertyName)
{
ErrorMessage = errorMessage;
PropertyName = propertyName;
}
}发布于 2009-10-22 08:36:55
如果您收到与此帖子相同的错误消息:
"'System.Web.Mvc.ModelStateDictionary‘不包含'AddModelErrors’的定义,并且找不到接受'System.Web.Mvc.ModelStateDictionary‘类型的第一个参数的扩展方法'AddModelErrors’(是否缺少using指令或程序集引用?)“
您可能会遇到以下问题:
http://p2p.wrox.com/book-professional-asp-net-mvc-1-0-isbn-978-0-470-38461-9/74321-addmodalerrors-allcountries-page-87-view-data-dictionary.html#post248356
https://stackoverflow.com/questions/1061393
复制相似问题