私は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
}
}
おかげで、次のように
コード例とすることができます。
ちょっとダーリン!超高速返信ありがとう - しかし、これは私のために働いていない。ページにリダイレクトできますが、入力フィールドは空白です。上に貼り付けたビューコードとは別に何か必要なことはありますか? – saurabhj
リダイレクトする必要はありません。エラーがある場合は、elseセクションで示したようにViewを返します。このようにして、コンテキストが保存されます。リダイレクトすると、コンテキストが失われます。成功した場合は、値をデータベースに格納してから、IDだけを渡すことでリダイレクトする必要があります。詳細アクションでは、このIDを使用してデータベースから保存した値を取得できます。 –
私は "リダイレクト"を意味しませんでした。ミスコミュニケーションのために申し訳ありません。私がやっていることは以下の通りです:リターンビュー( "〜/ Views/Question/Ask.aspx");あなたの提案によれば - ビューはコントローラに投稿されたデータを保持しません。 <%:Html.TextBox( "Title")%>〜<%:Html.TextBox( "Title"、 ""、新しい{@ style = "幅:700px"})値は単に空白です。私はそれが非常に標準的なものだと確信して、私はいくつかのものがありません。ありがとう。 – saurabhj