我正在尝试在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);
}
答案 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中获取它?只是好奇