0

我正在尝试在 ajax 更新的部分视图上返回请求。显然请求不是从 ajax 函数返回的。这里的ajax代码:

<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>

我究竟做错了什么?

4

2 回答 2

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 中内置的一项功能,可以非常轻松地使用部分结果更新元素。

这就是说您想要一个调用PartnerApplicationsAction 的新 Ajax 表单。您希望使用作为HttpMethod请求的 an 调用的操作,POST并且您希望结果替换 ( InsertionMode.Replace) 中的现有元素target(无论可能是什么),并且在请求发生时您希望元素AjaxSearch可见(这是可选的,但是我用来证明它正在工作)。

这将为您生成所需的 JavaScript,直到您完成一些事情,而不仅仅是返回部分作品 EXCELLENT!

编辑:您还需要更新您的操作...

return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });

需要改为....

return PartialView("PartnerApplicationsPartial", objs);

根据评论进行编辑:

在不更好地了解发送到服务器的数据的情况下,我无法告诉您要编写什么来替换该方法。但是,我会查看 的属性,new AjaxOptions(){}因为它有一些额外的属性,允许您指定 JavaScript 函数的名称以调用 Ajax 请求的四种状态(之前/之后/成功/失败)。因此,如果您需要计算某些内容,您可以通过指定将在提交 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.
于 2012-10-08T20:24:57.487 回答
-1

你不应该RedirectToAction。而不是重定向 return PartialView('Registration');

相关问题:
MVC Return Partial View as JSON
为 AJAX 加载 PartialView 和为非 AJAX 请求加载视图

于 2012-10-08T20:19:40.033 回答