4

私はまだ ASP.NET MVC にまったく慣れていないので、次のことを達成する方法を考えています: マスター ページの一部としての通常のビューで、さまざまな数の部分ビューをループで作成し、それぞれがユーザーが必要とする項目を表します。に投票することができます。投票ボタンをクリックすると、評価がデータベースに送信され、その後、ユーザーがクリックした特定の部分ビューが同じビューに置き換えられ、いくつかの視覚的プロパティが変更されます。これを達成するためのベストプラクティスは何ですか?

開始方法は次のとおりです。 1. if 文を使用して部分ビューを定義し、特定のビューモデルのフラグに応じて視覚的な外観を区別しました。したがって、フラグが正の場合は投票コントロールが表示され、負の場合は表示されません。

  1. コントローラー メソッドをトリガーする投票ボタンに Url.Action(..) を割り当てました。このメソッドでは、新しい評価がデータベースに追加されます。

  2. コントローラー メソッドでは、更新された ViewModel を含む PartialView を返します。残念ながら、部分的なビューだけでなく、ビュー全体が置き換えられます。

この特定の問題を解決する方法、または全体を達成する方法についての提案は、高く評価されます。

どうもありがとう、クリス

4

2 に答える 2

3

あなたの問題に対する些細な(しかし、間違いなく正確で使用可能な)解決策は、投票用の Ajax.BeginForm() ヘルパーです。このようにして、投票を ajax 呼び出しに変更し、この呼び出しによって返された結果 (変更された項目が 1 つだけの部分ビューを返す投票アクションから) を使用して古いコンテンツを置き換えることを簡単に指定できます (たとえば、投票前の古いアイテムを含む 1 つの特定の div)。

更新 - 2016 年 11 月 30 日

例えば:

@using (Ajax.BeginForm("SomeAction", "SomeController", new { someRouteParam = Model.Foo }, new AjaxOptions { UpdateTargetId = "SomeHtmlElementId", HttpMethod = "Post" }))
于 2011-09-12T14:19:36.373 に答える
1

ASP.NET MVC は、この種のニーズに最適なフレームワークです。もし私があなたの立場にいたら、JQuery Ajax API を使って作業したいと思います。

次のブログ投稿は、サーバーへの PartialViews、JQuery、および Ajax 呼び出しで何ができるかについてのヒントを提供するはずです。

http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-部分ビュー

アップデート

簡単な紹介を入れるように頼まれたので、ここにあります。

次のコードはアクション メソッドです。

    [HttpPost]
    public ActionResult toogleIsDone(int itemId) {

        //Getting the item according to itemId param
        var model = _entities.ToDoTBs.FirstOrDefault(x => x.ToDoItemID == itemId);
        //toggling the IsDone property
        model.IsDone = !model.IsDone;

        //Making the change on the db and saving
        ObjectStateEntry osmEntry = _entities.ObjectStateManager.GetObjectStateEntry(model);
        osmEntry.ChangeState(EntityState.Modified);
        _entities.SaveChanges();

        var updatedModel = _entities.ToDoTBs;

        //returning the new template as json result
        return Json(new { data = this.RenderPartialViewToString("_ToDoDBListPartial", updatedModel) });
    } 

RenderPartialViewToString はコントローラーの拡張メソッドです。ここで Nuget を使用して、TugberkUg.MVC という非常に小さなパッケージをダウンさせる必要があります。このパッケージ は、コントローラー内で部分ビューを文字列に変換するためのコントローラー拡張機能があります。

次に、 JQuery で呼び出す方法に関する簡単な情報を次に示します。

var itemId = element.attr("data-tododb-itemid");
var d = "itemId=" + itemId;
var actionURL = '@Url.Action("toogleIsDone", "ToDo")';

$("#ajax-progress-dialog").dialog("open");

$.ajax({
    type: "POST",
    url: actionURL,
    data: d,
    success: function (r) {
        $("#to-do-db-list-container").html(r.data);
    },
    complete: function () {
        $("#ajax-progress-dialog").dialog("close");
        $(".isDone").bind("click", function (event) {
            toggleIsDone(event, $(this));
        });
    },
    error: function (req, status, error) {
        //do what you need to do here if an error occurs
        $("#ajax-progress-dialog").dialog("close");
    }
});

いくつかの追加の手順を実行する必要があります。完全なウォークスルーを含むブログ投稿を見てください。

于 2011-09-12T10:21:22.607 に答える