如何序列化IEnumerable中的每个项目为ajax帖子

时间:2012-10-28 04:22:38

标签: asp.net-mvc asp.net-mvc-4

我有一个显示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时,我想通过ajax将相应电影的序列化Movie类发送到我的控制器。

我的问题是......

有没有更好的方法来序列化每部电影并将其附加到相应的锚点?我知道有data- html5属性,但我认为它们只允许字符串值,而不是json对象。我也知道我可以使用jQuery的.data()函数,但是我很难思考如何从PartialView运行,特别是因为_MoviePartial.cshtml呈现的html可能通过ajax从控制器返回

2 个答案:

答案 0 :(得分:0)

我的首选是返回一个JSON对象作为具有两个属性的响应; HtmlString和数据。 HtmlString可能包含呈现的局部视图,而Data可能包含请求的序列化对象。

我发现使用JSON非常容易,然后尝试返回带有嵌入式JSON对象的HTML。

答案 1 :(得分:0)

knockout.js这样的框架真的会让你的生活变得更轻松。

基本上,你会:

  1. 使用例如:Json.Encode(Model);
  2. 将所有电影数据加载为JSON数组
  3. 使用knockout创建foreach template以呈现您的数据。 Knockout将处理将显示的电影保持为完整电影模型的麻烦。
相关问题