2011-01-13 2 views
2

私はAsp.net MVC 2で新しいプロジェクトを開始しています。 私は主にwebforms開発者であり、Asp.Net MVCへのエクスポージャーが限られているため、ノブの質問。Asp.Net MVC入力したフィールドにエラーが発生した場合は、ページの先頭に戻る

私の状況は次のとおりです。 DBにデータを保存するための作成ページがあります。 このページのビューは強くバインドされていません。つまり、ビューからデータを抽出する方法は、POSTパラメータを調べることです。

エラー(データの検証など)が発生したため、以前のページに戻ってユーザーを送信し、メッセージが表示されているすべての状態に戻す必要があります。

ウェブフォームでは、これはビューの状態によって自動的に処理されますが、ここで同じことを行うにはどうすればよいですか?

ビュー:

<% using (Html.BeginForm("Create", "Question", FormMethod.Post)) { %> 
<div> 
Title: <%: Html.TextBox("Title", "", new { @style="width:700px" })%> 
</div> 
<div> 
Question: <%: Html.TextBox("Question", "", new { @style="width:700px" })%> 
</div> 
<input type="submit" value="Submit" /> 
<% } %> 

コントローラー:

[HttpPost] 
    [ValidateInput(false)] 
    public ActionResult Create() { 
     Question q = new Question(); 
     q.Title = Request.Form["Title"]; 
     q.Text = Request.Form["Question"]; 
     if(q.Save()) { 
      return RedirectToAction("Details", new { id = q.Id }); 
     } 
     else { 
      // Need to send back to Create page with data filled in 
      // Help needed here 
     } 
    } 

おかげで、次のように

コード例とすることができます。

答えて

1

エラーの場合は、単にビューを返すことができます。これによってコンテキストが保持されます。

強く型付けされたヘルパーと一緒に強く型付けされたビューを使用することをお勧めします。どのようにしてQuestionオブジェクトをアクションパラメータとして直接使用したかに注目してください。これは、このオブジェクトを手動で抽出してビルドしたコードと同じです。モデルバインダーはこのジョブを自動的に行います。

+0

ちょっとダーリン!超高速返信ありがとう - しかし、これは私のために働いていない。ページにリダイレクトできますが、入力フィールドは空白です。上に貼り付けたビューコードとは別に何か必要なことはありますか? – saurabhj

+0

リダイレクトする必要はありません。エラーがある場合は、elseセクションで示したようにViewを返します。このようにして、コンテキストが保存されます。リダイレクトすると、コンテキストが失われます。成功した場合は、値をデータベースに格納してから、IDだけを渡すことでリダイレクトする必要があります。詳細アクションでは、このIDを使用してデータベースから保存した値を取得できます。 –

+0

私は "リダイレクト"を意味しませんでした。ミスコミュニケーションのために申し訳ありません。私がやっていることは以下の通りです:リターンビュー( "〜/ Views/Question/Ask.aspx");あなたの提案によれば - ビューはコントローラに投稿されたデータを保持しません。 <%:Html.TextBox( "Title")%>〜<%:Html.TextBox( "Title"、 ""、新しい{@ style = "幅:700px"})値は単に空白です。私はそれが非常に標準的なものだと確信して、私はいくつかのものがありません。ありがとう。 – saurabhj

関連する問題