Как применить рейтинг в ASP.NET MVC - PullRequest
2 голосов
/ 22 февраля 2012

Я пытаюсь внедрить звездный рейтинг в MVC, но нахожу это очень трудным, потому что большинство рейтингов в Интернете использует jquery, где строка запроса текущего значения рейтинга находится внутри кода jquery. Я хочу иметь возможность оценивать каждый фильм на моем сайте. , но не может быть в состоянии передать мой 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"] помогает мне получить строку запроса текущего идентификатора фильма

@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 голосов
/ 22 февраля 2012

Я предполагаю, что когда вы создаете вызов jQuery, который публикует оценку в вашем действии, у вас есть возможность указать URL-адрес, на который должен быть опубликован рейтинг.Если нет способа расширить плагин jquery, чтобы разрешить дополнительные параметры, я бы отправил на маршрут 'Controller/MovieRating/@Model.MovieId', а затем разрешил плагину jQuery публиковать любые аргументы строки запроса, которые ему нужны.Как только вы получите это в своем контроллере, будет заполнено id, и вы сможете продолжить присваивать рейтинг фильму

ПРИМЕЧАНИЕ: предоставленный маршрут предполагает, что вы используете синтаксис бритвы, и так как вы не много публиковалиКод вашего представления или вашего контроллера, что у вашей viewmodel есть Movie Id как MovieId, вам, очевидно, придется изменить его в соответствии с вашими потребностями

EDIT после просмотра вашего кода, если вы изменитеэта строка

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.

Однако, другой вопрос, который у меня к вам, вы передаете модель просмотра на свою страницу?Почему бы вам не передавать идентификатор фильма через модель представления вместо того, чтобы каждый раз получать его из RouteData?Просто любопытно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...