所以我有一个 5 星评级系统,每个星都调用这个函数:
function Test(ideaId, rating){
//alert(ideaId + " : " + rating);
$.ajax({
url: '@Url.Action("RateIdea", "Ideas")',
dataType: "json",
type: "Get",
data: { "ideaId": ideaId, "ratingValue": rating, "challengeId": @Model.pkiChallengeId }
}).done(function (response) {
//alert('test');
$("#divDetailsPartial").html(response);
});
}
被称为ActionResult
:
public ActionResult RateIdea(int ideaId, int ratingValue, int challengeId)
{
string loggedInUserId = User.Identity.GetUserId();
int id = clsIdeas.SaveRating(ideaId, ratingValue, loggedInUserId);
ChallengeIdeasViewModel CIVM = new ChallengeIdeasViewModel();
IEnumerable<Ideas> ideasList;
CIVM.ideasList = clsIdeas.GetChallengeIdeas(challengeId, loggedInUserId);
CIVM.ChallengeStatus = clsIdeas.GetChallengeStatus(challengeId);
return PartialView("Details", CIVM);
//return Json(new { status = "success" }, JsonRequestBehavior.AllowGet);
}
在我的View
:
<div class="widget-body no-padding">
<div id="divDetailsPartial">
@Html.Action("Details", "Ideas", new { id = Model.pkiChallengeId })
</div>
</div>
为了解释,当页面加载并显示包含数据表的部分视图时,将调用 Action。我的评级系统有效(数据库已更新(,我只想刷新相同的部分视图,而不必刷新整个页面。
如果我返回 JSON 结果并只显示警报,它会起作用,但当我想用部分视图替换div 时就不行了。
我错过了什么?
因为您指定 ajax 调用需要从服务器返回 json 结果,而您从操作方法返回 PartView 将作为 html 字符串从服务器返回。
因此,更改以下行:
dataType: "json"
要么删除上面的行,要么调整它以告诉它从服务器返回 html。
以下设置将告诉它它期望返回 html 结果:
dataType : "html"
在此处阅读有关 ajax 调用中的数据类型属性的信息