使用 Ajax 调用将 div 替换为部分视图不起作用



所以我有一个 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 调用中的数据类型属性的信息

最新更新