我正在尝试在ajax更新的部分视图上发出请求返回。显然,请求不是从ajax函数返回的。 这里是ajax-code:
<script type="text/javascript">
function doAjaxPost(myid) {
// get the form values
var ApplSort = $('#DropDownListSort').val();
var radio_check_val=0;
for (i = 0; i < document.getElementsByName('radio').length; i++) {
if (document.getElementsByName('radio')[i].checked) {
radio_check_val = document.getElementsByName('radio')[i].value;
}
}
// alert("myid=" + myid +";"+ "ApplSort=" + ApplSort + ";" + "radio_check_val=" + radio_check_val);
$.ajax(
{
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: { ApplSort: ApplSort, radio_check_val: radio_check_val, myid: myid },
UpdateTargetId: "tabledata",
dataType: 'html',
url: 'Partner/PartnerApplications',
success: function (data) {
var result = data;
$('tabledata').html(result);
},
error: function (error) {
alert('Ошибка AJAX-запроса. Обновите страницу!');
}
});
}
</script>
调用失败,页面完全更新。
以下是视图中的更新内容:
<div id="target">
@Html.Partial("~/Views/Partner/PartnerApplicationsPartial.cshtml")
</div>
控制器代码:
[HttpPost]
public ActionResult PartnerApplications(int[] ApplSort, int[] radio_check_val, int[] myid)
{
MordaPartner MrdPrt = new MordaPartner(Server, Request);
if (Request.IsAjaxRequest())
{
var obj = MrdPrt.morda_obj.CookieAuthenticationPartner(Server, Request, Response, MrdPrt.PartnerLogin, MrdPrt.PartnerPassword);
if (obj != null)
{
//alert("ApplSort=" + ApplSort + ";" + "ApplSelectOffer=" + ApplSelectOffer + ";" + "ApplSelectAuction=" + ApplSelectAuction + ";" + "ApplSelectNoOffer=" + ApplSelectNoOffer);
var objs = from s in MrdPrt.morda_obj.entities.applications where s.application_user_city == obj.partner_city & s.application_blocked != 1 orderby s.application_id ascending select s;
return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });
}
else
{
return RedirectToAction("Registration");
}
}
else { return RedirectToAction("PartnerApplications"); }
}
RenderPartialViewToString取自此处:http://www.c-sharpcorner.com/blogs/7150/implementing-renderpartialviewtostring-in-asp-net-mvc-3.aspx
脚本已加载:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
我做错了什么?
答案 0 :(得分:1)
我认为你最简单的解决方案,因为你只想做一个局部......
@using( Ajax.BeginForm( "PartnerApplications",
null,
new AjaxOptions() {
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "target",
LoadingElementId = "AjaxSearch" },
new { id = "UserSearchForm" } ) ) {
<input type="text" id="id" name="id" placeholder="Enter Search" />
}
这是一种内置于MVC中的功能,可以轻松地使用部分结果更新元素非常。
所有这一切都说明你需要一个调用PartnerApplications
Action的新Ajax表单。您希望使用HttpMethod
POST
请求调用的操作,并且您希望结果替换InsertionMode.Replace
target
中的现有元素(无论可能是什么) )并且在请求发生时你希望元素AjaxSearch
可见(这是可选的,但我用它来表明它正在工作)。
这将为您生成所需的JavaScript,直到您完成除了简单返回部分工作之外的其他内容!
编辑:您还需要更新您的行动......
return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });
需要改为......
return PartialView("PartnerApplicationsPartial", objs);
基于评论的编辑:
在不知道发送到服务器的数据的情况下,我无法告诉您要写什么来替换该方法。然而,我会查看new AjaxOptions(){}
的属性,因为它有一些额外的属性,允许您指定要在Ajax请求的四个状态(之前/之后/成功/失败)上调用的JavaScript函数的名称。因此,如果您需要计算某些内容,可以通过指定在提交Ajax请求之前处理的JavaScript函数来执行此操作。
此外,您需要做更多工作才能获得所选的单选按钮值(特别是因为您使用的是jQuery)。
你可以替换......
var radio_check_val=0;
for (i = 0; i < document.getElementsByName('radio').length; i++) {
if (document.getElementsByName('radio')[i].checked) {
radio_check_val = document.getElementsByName('radio')[i].value;
}
}
与...类似的东西。
var radio_check_val = $('radio').filter(':checked').val();
//this will only work if there is only one set of radio buttons on the page.
//Otherwise you will need to add a name to the selector.
答案 1 :(得分:-1)
你不应该RedirectToAction
。而不是重定向返回PartialView('Registration');
。
相关问题:
MVC Return Partial View as JSON。
Load PartialView for AJAX and View for non-AJAX request