1

ASP.NET MVC を使用して単純なブログ プラットフォームを作成しています。私の質問は、部分ビューに含まれるフォームと、コントローラーからの応答、検証エラー、または成功の処理に関するものです。

特定の URL の投稿を返すコントローラーが関連付けられているブログ投稿アイテム ビューがあります。このビューには、投稿に関するコメントを送信するためのフォームを含む部分ビューが埋め込まれています。部分ビュー フォームは、コメントの追加を処理する別のコントローラーに送信されます。add comment アクション内で検証を実行し、エラーを ModelState オブジェクトに追加します。

問題は、ユーザーが元の投稿アイテムに戻されるように、部分ビュー アクションで RedirectResult を返さなければならないことです。つまり、ModelState オブジェクトや返すべき成功メッセージが失われます。

検証や成功の情報を元のビューに戻すために TempData を使用することについて人々が言及しているのを見てきましたが、私にはこれは少しハックに聞こえます。これは本当に解決策ですか?もしそうなら、誰かがその使用法の良い例を推薦できますか? そうでない場合、これは選択したアーキテクチャに大きな問題があることを示していますか?

4

3 に答える 3

3

過去にPRGパターンを使用したことがありますので、試してみてください

データ変更に PRG パターンを使用する

于 2009-12-09T20:15:32.423 に答える
1

コメントの追加アクションで投稿の表示アクションを呼び出すことができます...

私が推測するこのようなもの:

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});
    }
}

または、同じコンセプトのバリエーション...

HTH、
チャールズ

于 2009-12-09T22:31:10.330 に答える
0

Ajaxライブラリを使用して、ページのその領域を投稿することを検討しましたか?そうすれば、リダイレクトする必要はありません。

于 2009-12-09T20:00:38.640 に答える