3

私は奇妙なものを持っています。TextArea ヘルパーを使用するだけで、標準のテキストエリアをレンダリングしようとしています。

    <p>
        <label for="Message">Message:</label>
        ${ Html.TextArea("IssueText") }
        ${ Html.ValidationMessage("IssueText", "*") }
    </p>

そして私のコントローラー

   public ActionResult Contact() {
            return View();
    }
  [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Contact(FormCollection form) {
            Seller user = _session.AuthenticatedSeller;
            ServiceTicket ticket = new ServiceTicket(user, form["IssueText"],
               form["ContactReason"]);
            if (ticket.IsValid) {
                _servicetTicketRepository.Add(ticket);
                _servicetTicketRepository.Commit();
                return RedirectToAction("Index", "MyPlace");
            }

            ModelState.AddModelErrors(ticket.GetRuleViolations());
            return View();
        }

そして、ページの最初のロードでは、問題なく動作し、テキストエリアをレンダリングします

前 http://cadred.net/personal/contact-before.png

ただし、検証をテストするためにフォームを送信すると、テキストエリアがレンダリングされなくなります

アフター http://cadred.net/personal/contact-after.png

4

1 に答える 1

3

テスト領域の代わりにsparkコードを取得する理由は、html.textarea関連のステートメントを実行しようとしたときに発生するnullref例外が原因です。

ビューを次のように作り直すと、デバッガーでsparkによって生成されたビューコードに割り込むことができます。

<p>
  <label for="Message">Message:</label>
# System.Diagnostics.Debugger.Break();
  ${ Html.TextArea("IssueText") }
  ${ Html.ValidationMessage("IssueText", "*") }
</p>

これでプロジェクトをF5でき、ビューを押したときにデバッガーを起動するように求めるダイアログが表示されます。最初は無視し([いいえ]を押します)、2回目は(送信を押した後)デバッガーを起動します。リストには、プロジェクトを実行したVSインスタンスが含まれている必要があります。それを選択すると、すぐに使用できます。

nullを探します。そうでない場合は、テキスト領域をレンダリングするtrycatchとそのcatchハンドラーにブレークポイントをドロップします。うまくいけば、何が起こっているのかを判断するのに十分な情報が得られます。

于 2009-10-11T09:16:59.223 に答える