いくつかのことを仮定しましょう:
HTMLの製品IDは次のとおりです。
<div id="star-rating" data-pid="@Model.Id">
<input type="radio" name="example" class="rating" value="1" />
<input type="radio" name="example" class="rating" value="2" />
<input type="radio" name="example" class="rating" value="3" />
<input type="radio" name="example" class="rating" value="4" />
<input type="radio" name="example" class="rating" value="5" />
</div>
そのため、ページごとに1つの商品だけでなく、商品のリストを作成できます。
現在ログインしているユーザーIDと同じである場合、ユーザーIDを渡すことはセキュリティ慣行ではありません。現在のセッションからユーザーIDを取得するだけでよいため、コントローラーに次のようになります。
public class ServicesController : Controller
{
public ActionResult RateProduct(int id, int rate)
{
int userId = WebSecurity.CurrentUserId;
bool success = false;
string error = "";
try
{
success = db.RegisterProductVote(userId, id, rate);
}
catch (System.Exception ex)
{
// get last error
if (ex.InnerException != null)
while (ex.InnerException != null)
ex = ex.InnerException;
error = ex.Message;
}
return Json(new { error = error, success = success }, JsonRequestBehavior.AllowGet);
}
}
このようにして、次のようにレートを簡単に呼び出すことができます。
<script>
$(function () {
$('#star-rating').rating(function (vote, event) {
var anchor = $(event.currentTarget),
pid = anchor.closest(".ratting-item").data("pid"),
url = '@Url.Action("RateProduct", "Services")';
// show a loading div that would have a animated gif
$(".loading").show();
$.ajax({
url: url,
type: "GET",
data: { rate: vote, id: pid },
success: function (data) {
if (data.success) {
// all went well, here you can say Thank you
}
else {
// There must be an Exception error, let's show it
}
},
error: function (err) {
// the call thrown an error
},
complete: function () {
$(".loading").hide();
}
});
});
});
</script>
更新しました
$(this)
は正しい要素を返さないためevent
、呼び出しで渡されるプロパティを使用する必要があります。
したがって、これに変更する必要があります。
var anchor = $(event.currentTarget),
pid = anchor.closest(".ratting-item").data("pid"),
url = '@Url.Action("RateProduct", "Services")';
単純console.log($(this))
でconsole.log(event);
、さらに、Fiddlerを起動すると、何が欠落しているかがわかり、返された呼び出しのエラーも表示されます。
GITのプロジェクト例
このプロジェクトが機能しているソースコードは次のとおりです:https ://github.com/balexandre/Stackoverflow-Question-14014091