如何在ASP.NET MVC中应用评级

时间:2012-02-22 13:08:11

标签: c# asp.net-mvc

我正在尝试在MVC中实施星级评级,但发现它非常困难,因为互联网上的大多数评级都使用jquery,其中当前评级值的查询字符串在jquery code.i中,我希望能够为我网站上的每部电影评分,但无法将我的movieID传递给MovieRating动作。这是因为正在传递的查询字符串已经被评级。我也尝试使用FormCollection来收集我的movieID但收到空值。我还希望在登录网站时显示每个用户评级。请高度赞赏任何帮助。

public ActionResult MovieRating(int id, int rating, MovieRating MovieRating)
{
    MovieRating.Rating= rating;
    MovieRating.ProfileID = "duru";

    MovieRating.MovieID =id;
    //save change not yet implemented    
}

这是我视图中的代码:这个Url.RequestContext.RouteData.Values [“id”]帮我获取当前movieID的查询字符串

@using (Html.BeginForm("MovieRating", "Movie", FormMethod.Post, new { id =          Url.RequestContext.RouteData.Values["id"] }))
{
    <p>
      <img src="../../Content/RatingImages/EmptyStar.png"  class="MovieRating"  alt="Star Rating" align="middle" id="1" />
      <img src="../../Content/RatingImages/EmptyStar.png" class="MovieRating" alt="Star Rating" align="middle" id="2" />
      <img src="../../Content/RatingImages/EmptyStar.png" class="MovieRating" alt="Star Rating" align="middle" id="3" />
      <img src="../../Content/RatingImages/EmptyStar.png" class="MovieRating" alt="Star Rating" align="middle" id="4" />
      <img src="../../Content/RatingImages/EmptyStar.png" class="MovieRating" alt="Star Rating" align="middle" id="5" />
   </p>
   <div id="result"></div>
}

这是jquery代码

/// <reference path="jquery-1.5.1-vsdoc.js" />
/// <reference path="jquery-ui-1.8.11.js" />
/*(document).(function(){*/
$(function () {
    $('.MovieRating').mouseover(function () {
        giveRating($(this), "FilledStar.png");
        $(this).css("cursor", "pointer");
    });

    $('.MovieRating').mouseout(function () {
        giveRating($(this), "EmptyStar.png");
    });

    $('.MovieRating').click(function () {
        $('.MovieRating').unbind("mouseout mouseover click");

        // call ajax methods to update database
        var url = "/Movie/MovieRating?rating=" + parseInt($(this).attr("id"));
        $.post(url, null, function (data) {
            $("#result").text(data);
        });
    });
});

function giveRating(img, image) {
    img.attr("src", "/Content/RatingImages/" + image)
        .prevAll('.MovieRating').attr("src", "/Content/RatingImages/" + image);
}

1 个答案:

答案 0 :(得分:0)

我认为,当您构建jQuery调用时,会将评级发布到您的操作,您可以指定评级应该发布到的网址。如果没有办法扩展jquery插件以允许其他参数,我会发布到路由'Controller/MovieRating/@Model.MovieId',然后允许jQuery插件发布它需要的任何查询字符串参数。在控制器中收到此消息后,系统会填充id,您可以继续为电影分配评分

注意:提供的路线假定您使用的是razor语法,并且由于您没有发布有关视图或控制器的大量代码,因此您的视图模型将Movie Id设置为MovieId,您显然必须将其更改为适合你的需求

修改 看到你的代码后,如果你改变这一行

var url = "/Movie/MovieRating?rating=" + parseInt($(this).attr("id"));

到此:

var url = "/Movie/MovieRating/@Url.RequestContext.RouteData.Values["id"]?rating=" + parseInt($(this).attr("id"));

它应该让你朝着正确的方向前进。这将允许您的MovieRating操作接受它期望的id参数。

但是,我有另一个问题,你是否将视图模型传递给你的页面?你为什么不在你的视图模型中传递电影的ID,而不是每次都从RouteData中获取它?只是好奇