gpt4 book ai didi

asp.net-mvc - NerdDinner 的 AddModelErrors 是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 22:09:20 26 4
gpt4 key购买 nike

我正在阅读 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 方法。

我显然在这里遗漏了一些非常重要的东西。它是什么?

最佳答案

您需要包含助手引用;

using NerdDinner.Helpers;


using NerdDinner.Models;

然后检查是否有效并添加错误;
if (!dinner.IsValid)
{
ModelState.AddModelErrors(dinner.GetRuleViolations());
return View(dinner);
}

你的晚餐还必须有部分类(class);
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;
}
}

关于asp.net-mvc - NerdDinner 的 AddModelErrors 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1061393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com