4

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);
            }
        }
    }
}

チュートリアルの内容とコードの内容を組み合わせて実行しようとしましたが、AddModelErrors1つの引数のみを受け入れるメソッドがないという予期されたエラーが発生しました。

私は明らかにここで非常に重要な何かを見逃しています。それは何ですか?

4

2 に答える 2

11

ヘルパーリファレンスを含める必要があります。

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-06-30T02:04:50.773 に答える
3

このポスターと同じエラーメッセージが表示された場合:

"'System.Web.Mvc.ModelStateDictionary'には、'AddModelErrors'の定義が含まれておらず、タイプ'System.Web.Mvc.ModelStateDictionary'の最初の引数を受け入れる拡張メソッド'AddModelErrors'が見つかりませんでした(ディレクティブまたはアセンブリ参照?)」

この問題が発生している可能性があります。

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

于 2009-10-22T00:36:54.777 に答える