2012-02-22 4 views
2

MVCで星評価を実装しようとしていますが、インターネット上のほとんどの評価で現在の評価値のクエリ文字列がjqueryコードの内側にあるため、非常に難しいと感じています。私のサイトの各映画を評価することができますが、私のmovieIDをMovieRatingアクションに渡すことはできません。これは、合格しているクエリ文字列がすでに評価によって取得されているためです。私はまた、私のmovieIDを収集するためにFormCollectionを使用してみましたが、null値を受け取っていました。また、ユーザーがサイトにログオンしたときに各ユーザーの評価を表示する必要があります。助けて頂ければ幸いです。 ASP.NET MVCで評価を適用するには

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コールを作成しているときに、評価を投稿するURLを指定する機能があると仮定します。追加のパラメータを許可するためにjqueryプラグインを拡張する方法がない場合、私はルート'Controller/MovieRating/@Model.MovieId'に投稿し、jQueryプラグインが必要とするクエリ文字列引数を投稿できるようにします。コントローラでこれを受け取ったら、idが入力され、映画にあなたのレーティングを引き続き割り当てることができます

注:提供されているルートは、あなたの眺めに関するコードをあまり投稿していないまたはあなたのコントローラは、あなたのviewmodelはMOVIEIDとして作品IDを持っていることを、あなたは明らかに

EDIT あなたのコードを見た後、あなたがこの行を変更した場合

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

ニーズに合わせてこれを変更する必要があります012これに

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

それは正しい方向にあなたを取得する必要があります。これにより、MovieRatingアクションは期待しているidパラメータを受け入れることができます。

しかし、私があなたに持っている別の質問は、あなたのページにビューモデルを渡していますか?毎回RouteDataから取得するのではなく、ムービーのIDをviewmodelに渡すのはなぜですか?ただ好奇心が強い

関連する問題