1

を表示するPartialViewがありますIEnumerable<Movie>

_MoviePartial.cshtml

@foreach(var movie in Model) {
    <div class="content">
        <span class="image"><img src="@movie.Posters.Profile" alt="@movie.Title"/></span>
        <span class="title">@movie.Title</span>
        <div class="score`">
            <span class="critics-score">@movie.Ratings.CriticsScore</span>
            <span class="audience-score">@movie.Ratings.AudienceScore</span>
        </div>
        @Html.ActionLink("Add Movie", "Add", "MyMovies")
    </div>
}

ユーザーが[映画の追加]ActionLinkをクリックすると、ajax投稿を実行して、選択した映画をユーザーコレクションに追加します。Movie私の問題は、選択したクラス全体を「追加」アクションに送信したいのですが、Movieクラス全体がPartialViewにレンダリングされず、いくつかのプロパティだけであるため、各ムービーをシリアル化する方法がわからないことです。私はこのようなものをシリアル化できることを知っています...

<script type="text/javascript">
    var obj = @Html.Raw(Json.Encode(movie));
</script>

しかし、それがhtmlをレンダリングするforeachループ内、特に。内でどのように機能するかはわかりませんPartialView

したがって、明確にするために、ユーザーが[映画の追加]をクリックすると、それぞれの映画ActionLinkのシリアル化されたMovieクラスがajaxを介してコントローラーに送信されます。

私の質問は...

各映画をシリアル化し、それぞれのアンカーに追加するためのより良い方法はありますか?html5属性があることは知っていdata-ますが、jsonオブジェクトではなく、文字列値のみを許可すると思いました。jQueryの関数を使用できることも知っ.data()ていますが、PartialViewからそれを実行する方法を考えるのに苦労しています。特にによってレンダリングされたhtmlが_MoviePartial.cshtmlajaxを介してコントローラーから返される可能性があるためです。

4

2 に答える 2

0

私の好みは、2つのプロパティを持つ応答としてJSONオブジェクトを返すことです。HtmlStringとデータ。HtmlStringにはレンダリングされた部分ビューが含まれる場合があり、Dataにはリクエストのシリアル化されたオブジェクトが含まれる場合があります。

これはJSONでの作業がめちゃくちゃ簡単で、JSONオブジェクトが埋め込まれたHTMLを返そうとしていることがわかりました。

于 2012-10-28T04:56:56.553 に答える
0

knockout.jsのようなフレームワークは、ここでの生活を本当に楽にしてくれます。

基本的に、次のようになります。

  1. たとえば、次のコマンドを使用して、すべての映画データをJSON配列としてロードします。Json.Encode(Model);
  2. ノックアウトを使用してforeachテンプレートを作成し、データをレンダリングします。ノックアウトは、表示された映画を完全な映画モデルに保つという問題を処理します。
于 2012-10-28T06:04:38.383 に答える