0

ajaxで更新された部分ビューでリクエストを返そうとしています。どうやら ajax-function からリクエストが返ってきません。ここで 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>

Fail が呼び出され、ページが完全に更新されます。

ビューの更新されたコンテンツは次のとおりです。

<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 に組み込まれている機能で、パーシャルの結果で要素を非常に簡単に更新できます

これが言っているのは、PartnerApplicationsアクションを呼び出す新しい Ajax フォームが必要だということだけです。HttpMethodリクエストである で呼び出されたアクションが必要であり、その結果が(それが何であれ) 内の既存の要素POSTを置き換える ( ) 必要があり、リクエストが行われている間、要素を表示したい (これはオプションですが、何か私はそれが機能していることを示すために使用します)。InsertionMode.ReplacetargetAjaxSearch

これにより、必要な JavaScript が生成され、単に部分的な結果を返す以上のことができるようになるまでは、非常に優れています。

編集:また、アクションを更新する必要があります...

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

…に変更する必要があります。

return PartialView("PartnerApplicationsPartial", objs);

コメントに基づいて編集:

サーバーに送信されているデータをよく知らなければ、そのメソッドを置き換えるために何を書けばよいかわかりません。new AjaxOptions(){}ただし、Ajax リクエストの 4 つの状態 (前/後/成功/失敗) で呼び出す 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.
于 2012-10-08T20:24:57.487 に答える
-1

あなたはすべきではありませんRedirectToAction。リダイレクトリターンの代わりにPartialView('Registration');

関連する質問:
MVCは部分ビューをJSONとして返します
AJAXのPartialViewと非AJAXリクエストのViewをロードします

于 2012-10-08T20:19:40.033 に答える