部分ビューからの応答を返すためのベストプラクティス
-
18-09-2019 - |
質問
私は、ASP.NET MVCと簡単なブログプラットフォームを書いています。私の質問は、コントローラから、部分的なビューに含まれているフォームや応答を処理、検証エラーや成功に関するされます。
私は、与えられたURLのためのポストを返す関連するコントローラを持っているブログ記事アイテムビューを持っています。このビューに埋め込まれたポストにコメントを提出するためのフォームを含む部分図です。部分図形は、コメントを追加処理する別のコントローラに送信します。コメントを追加アクション内で、私は検証を実行してにModelStateオブジェクトにエラーを追加します。
問題は、私は、ユーザーが、私はにModelStateオブジェクトまたは私は返すようにしたい任意の成功メッセージを失うことを意味し、元のポスト項目に戻されるように部分ビューアクションにRedirectResultを返す必要があるということです。
私が見た人は、元の表示に戻って検証や成功の情報を渡すためにTempDataをの使用を言及しますが、私にはこれは少しハック聞こえます。これは本当にソリューションですか?もしそうなら誰もがその使用の良い例をお勧めすることができますか?そうでない場合、これは私の選択したアーキテクチャにおける大きな問題の兆候ですか?
解決
私は
それを試してみる過去にPRGパターンを使用していました<のhref = "http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx#prg" のrel = "nofollowをnoreferrer ">のために使用PRGパターンデータ修正する
他のヒント
あなたはコメントを追加アクションが表示ポストアクションを呼び出すことができます...
このような何か、私は推測します:
public class PostController
{
... blah ...
public ActionResult ViewPost(int postId)
{
Post post = PostRepository.GetPost(postId);
return View("ViewPost", post);
}
public ActionResult AddComment(int postId, string comment, string otherInfo)
{
//Validate stuff, setting modelstate etc
//If it isn't valid, return the same post view (modelstate will stay)
if (!ModelState.IsValid)
return this.ViewPost(postId);
//If it is valid then we want to save it and follow PRG pattern
PostRepository.Save(newValidComment);
TempData["Message"] = "Thanks for your comment!";
return RedirectToAction("ViewPost", new {id = postId});
}
}
あるいは、同じ概念の変化...
HTHS、
チャールズ
あなただけのページのその領域を投稿するAjaxライブラリを使用して考えがありますか?その方法は、あなたがリダイレクトする必要はありません。