1

私はMVCが初めてなので、ご容赦ください。:-)

強く型付けされた「ストーリー」ビューがあります。このビュー (ストーリー) にはコメントを付けることができます。

コメント コントローラー "ListStoryComments" と "CreateStoryComment" の 2 つのビュー (部分ビューではない) を作成しました。これらのビューは、RenderAction を使用して Story ビューに含まれます。

<!-- List comments -->
<h2>All Comments</h2>
<% Html.RenderAction("ListStoryComments", "Comments", new { id = Model.Story.Id }); %>

<!-- Create new comment -->
<% Html.RenderAction("CreateStoryComment", "Comments", new { id = Model.Story.Id }); %>

(関連するコメントを一覧表示するためにストーリー ID を渡します)。

フォームを使用して新しいコメントを投稿すると、現在の (親) ビューが返されますが、コメントフォームフィールドには最後に入力したコンテンツが表示され、ListStoryComments ビューは更新されません。新しいストーリーを表示します。

基本的に、ブラウザの戻るボタンを押したかのように、ページはキャッシュから読み込まれます。f5 を押すと、フォームを再投稿しようとします。ページを手動で再読み込み (ブラウザーのアドレス バーに URL を再入力) してから f5 キーを押すと、新しいコンテンツと空のフォーム フィールドが表示されます。これが目的の結果です。

完全を期すために、私の CreateStoryComment アクションは次のようになります。

    [HttpPost]
    public ActionResult CreateStoryComment([Bind(Exclude = "Id, Timestamp, ByUserId, ForUserId")]Comment commentToCreate)
    {
        try
        {
            commentToCreate.ByUserId = userGuid;
            commentToCreate.ForUserId = userGuid;
            commentToCreate.StoryId = 2; // hard-coded for testing

            _repository.CreateComment(commentToCreate);
            return View();
        }
        catch
        {
            return View();
        }
    }
4

4 に答える 4

3

答えは、return RedirectToAction() を使用することです。これを使用すると、PRG パターンが強制され、私の目標が達成されます。

元の投稿への以前のコメントでエラーが発生しましたが、まだ混乱していると思いますが、これは機能します。

return RedirectToAction("Details", "Steps", new { id = "2" });
于 2010-01-08T13:53:11.220 に答える
1

私、そしてこれは個人的な意見ですが、あなたはこれに間違った方法で取り組んだと思います。

個人的にはそうします。

  1. ListStories というビューを作成します。
  2. ストーリーをリストする部分ビューを作成します。
  3. 部分ビューを作成してストーリーを作成します。
  4. ストーリーを追加したい場合は、add story html を表示するだけです。
  5. 次に、ユーザーがボタンを押すと、jQuery ポストバックを実行し、新しいストーリーを追加して、新しいストーリーまたはすべてのストーリーの PartialView を返します。
  6. すべてのストーリーの部分ビューを返す場合は、すべてのストーリーを含む境界 div を新しいデータに置き換えます。
  7. 単一のストーリーのみを返す場合は、ストーリーを含む div の最後に追加します。

これは多くの再作業を意味し、複雑で多くの作業のように聞こえますが、このように行うと、部分ビューを再利用したり、一度にすべてのビューを変更したりできるため、後で柔軟性が向上します。その部分ビューが更新されました。

また、jQuery を使用するということは、ストーリーの追加が明確なポストバックなしで見栄えがすることを意味します。

于 2010-01-08T04:39:17.573 に答える
0

答えは、フォーム アクションが適切に設定されていることを確認することです。renderaction を使用し、フォーム コントローラーとアクションを手動で設定していない場合、アクションは現在の URL になります。

試す:

<% using (Html.BeginForm("ActionName", "ControllerName")) {%>

それ以外の:

<% using (Html.BeginForm()) {%>
于 2012-05-16T01:34:52.490 に答える
0

問題はキャッシュにあると思われるため、キャッシュを無効/制限するだけです。

次の属性をアクションに追加します。

[OutputCache(Duration = 0, VaryByParam = "none")]

これはブラウザにページをキャッシュするように指示しますが、0 秒間です。投稿がページをリロードすると、目的の結果が表示されるはずです。

于 2012-04-29T15:27:11.920 に答える