2012-03-07 15 views
2

私はAsp.net MVC3を使用していて、部分的なビューを返し、検索中にアイテムのリストを更新するシンプルなAjaxポストをサーバーに実行しようとしています。Request.IsAjaxRequestはMVC3でtrueを返すことはありません

@using (Ajax.BeginForm("PartialUpdate", "Listing" 
     , new AjaxOptions { 
       UpdateTargetId = "ListPartialDiv", 
       HttpMethod = "GET", 
       InsertionMode = InsertionMode.Replace, 

     })) 
    { 
     <!-- Search Boxes and buttons here --> 
    } 

    <div id = "ListPartialDiv"> 
     @{ 
      Html.RenderPartial("_ListPartial", Model); 
     } 
    </div> 

ajaxは正常にサーバーを呼び出し、サーバーは部分ビューを送信して応答します。しかし、部分ビューは常に新しいページにレンダリングされます。私はこれが、それがajaxコールが来ていることを知らないので、新しいページをレンダリングすることが分かった。私は正しいjqueryの-ubobtrusive-ajax.min.jsスクリプトを含めて、次のようThis Question

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"> 

に応じて私のコントローラコードは非常にシンプルであるキーを追加しました:

 if (Request.IsAjaxRequest()) 
      return PartialView("_ListPartial", list); 

     return View("Index", list); 

しかし、 Request.IsAjaxRequest()は何があっても常にfalseを返します。 また、This Questionによると、fiddlerとfirebugを使用していますが、X-Requested-Withヘッダーは表示されませんが、その意味や変更方法を実際に把握することはできません。私が考えることができるのは、私が見ている他のすべての例で古いバージョンのjqueryを使用していることだけです。それはそれと関係がありますか?助けてくれてありがとう。

+0

ブラウザが実際にAJAX POSTを実行していないことに気がつきましたか? – SLaks

答えて

7

jQueryの前にunobtrusive-AJAXスクリプトが含まれているため、スクリプトが動作していません。

+0

ああ同じ答えを入力しようとしていた – Blindy

+0

それを釘付け!ありがとう! – Dan

0

他のjqueryスクリプトファイルの後にjquery.unobtrusive.ajax.js/jquery.unobtrusive.ajax.min.jsスクリプトファイルが参照されていることを確認してください。また、ページごとに複数回ファイルを参照しないようにしてください

1
var controllerContext = MockRepository.GenerateMock<ControllerContext>(); 
controllerContext.Expect(c => c.HttpContext.Request["X-Requested-With"]).Return("XMLHttpRequest"); 
controller.ControllerContext = controllerContext; 
0

このようなjqueryスクリプトの後に控えめなスクリプトを追加する必要があります。

bundles.Add(new ScriptBundle("~/bundles/searchDemo").Include(
       "~/Scripts/jquery-{version}.js", 
       "~/Scripts/jquery-ui-{version}.js", 
       "~/Scripts/jquery.unobtrusive*", 
       "~/Scripts/jquery.validate*")); 
0

IsAjaxRequest()がうまくいかなかったのと同様の状況に遭遇しました。 Microsoftの控えめなパッケージが含まれていることを確認しました。それはまだ助けになりませんでした。 パッケージマネージャーから控えめなライブラリの最新バージョンにアップグレードするだけで機能しました!

関連する問題