1

Professional ASP.NET MVC 1.0ブックの第1章の「編集エラーの処理」(67ページ)にアクセスしていて、問題が発生しています。

問題は、夕食を編集しているときに[保存]をクリックすると、タイトルを空白のままにしても、フォームエラーが検出されないことです。UpdateModel(dinner)もdinnerRepository.Save()もエラーをスローしません。

保存後にデータベースをチェックすると、タイトルフィールドは実際に空です。エラーをスローせずにそれをどのように行うことができますか?

どんな助けでもいただければ幸いです。以下のコードを編集します。

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int id, FormCollection formValues)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);

        try
        {
            UpdateModel(dinner);
            dinnerRepository.Save();
            return RedirectToAction("Details", new { id = dinner.DinnerID });
        }
        catch
        {
            foreach (var issue in dinner.GetRuleViolations())
            {
                ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
            }

            return View(dinner);
        }            
    }

問題が見つかりました-実際、それは私の側のN00Bエラーでした。奇妙な理由で、次のコードをコメントアウトしました。

 partial void OnValidate(ChangeAction action)
    {
        if (!IsValid)
            throw new ApplicationException("Rule violations prevent saving");
    }

エラーをキャッチしていなかったのも不思議ではありません...助けてくれたRememberMeに感謝します!それは有り難いです。

4

2 に答える 2

0

あなたのモデルでは、その状態をチェックしていますか?

public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(title.Trim()))
                yield return new RuleViolation("Dinner Title is required", "title");

            yield break;
        }

編集: 違反が追加されたことがなく、カウントされたようです。これを試して:

if (ModelState.IsValid)
            {

                try
                {
                    ...
                }
                catch
                {
                    ModelState.AddModelErrors(dinner.GetRuleViolations());
                }
            }
            else
            {
                ModelState.AddModelErrors(dinner.GetRuleViolations());
            }
于 2010-02-19T21:57:27.293 に答える
0

最後に、答えがあるこの本の Wrox フォーラムを見つけました。その答えは実に驚くべきものです。Visual Studio 2010 のデバッガーと関係があります。

基本的に F5 を押して続行すると、すべて正常に動作します。

より多くの回答があるフォーラムスレッドへのリンクは次のとおりです。

http://p2p.wrox.com/book-professional-asp-net-mvc-2/79788-constraintexception-unhandled-user-code.html#post261814

于 2010-08-15T04:06:03.610 に答える