2012-04-13 8 views
0

私はASP.Net MVC2を使用しています。私は、Jquery Ajaxのコール・コントローラーがコールすると、新しいウィンドウのウィンドウを開こうとしています。ここ が私のコード..ですここでASCXページで ...コールコントローラーがJquery Ajaxからコールコントローラーの場合は新しいウィンドウを開きます

$('#DeleteButton').click(function() { 

      var isLineChecked = $(':checkbox:checked', '#providerSearchResultsTable').length; 

      if (isLineChecked == 0) { 
       alert("Please select at least one row "); 
       return false; 
      } 

      else { 

       var params = { 
        Id: gaiSelected.join(',') 

       }; 

       alert(params); 
       $.ajax({ 

        type: "Post", 
        url: "SelectProviderAndContact", 
        data: params, 
        success: function (html) { 
         **//$('#SelectProviderAndContact').html(html);** 
    } 
       }); 

      } 
}); 

は私のコントローラのアクションメソッド

[SessionFilter] 
     public ActionResult SelectProviderAndContact(string Id) 
     { 
      try 
      { 
       List<ProviderBaseInfo> providerList = null; 
       string[] internalProviderIDs = Id.Split(",".ToCharArray()); 
       //string[] billingProviderNames = billingProvider.Split(",".ToCharArray()); 

       IStateBag stateBag = _commonModel.GetStateBag(); 
       //stateBag.SetValue("InternalProviderId", Id); 
       List<Guid> internalProviderIds = new List<Guid>(); 
       foreach (var a in internalProviderIDs) 
       { 
        internalProviderIds.Add(new Guid(a)); 
       } 

       List<Contacts> providerContactList = _providerModel.GetProviderContactlist(internalProviderIds); 

       if (providerContactList.Count <= 0) 
       { 
        //IStateBag stateBag = GetStateBag(); 
        List<ProviderBaseInfo> providers = (List<ProviderBaseInfo>)stateBag.GetValue(ProviderListCache); 

       if (providers == null) 
       { 
        providerList = _providerModel.GetProviderCompleteList(null, null, null, null, Id).ToList(); 

       } 
       else 
       { 
        providerList = providers.Where(x => internalProviderIds.Contains(x.InternalProviderId)).ToList(); 
       } 

       providerContactList = _providerModel.GetContactlistbyInsertingProviders(providerList); 
       } 

       ViewData["ProviderNotFound"] = false; 

       // ViewData["ProviderName"] = new SelectList(billingProvider.Select(x => new { value = x, text = x }), "value", "text"); 
       var Provider = new[] { 
       new { ProviderId = "A", Providername = "A" } 
       //new DataContracts.RegionKeyValues { RegionId = "B", RegionValue = "B" }, 
       //new DataContracts.RegionKeyValues { RegionId = "D", RegionValue = "D" } 
      }; 
       ViewData["ProviderName"] = new SelectList(Provider, "ProviderId", "Providername"); 

       **return View("SelectProviderAndContact",providerContactList);** 



      } 
      catch (FaultException<MedicareFault> ex) 
      { 
       if (ex.Code.Name == typeof(ArgumentException).Name) 
       { 
        ViewData["ProviderNotFound"] = true; 
        ViewData["Error"] = ex.Reason; 
        return View((object)null); 
       } 
       else 
       { 
        ViewData["Error"] = Errors.Common.UnknownError; 
        return View((object)null); 
       } 
      } 
      catch 
      { 
       ViewData["Error"] = Errors.Common.UnknownError; 
       return View((object)null); 
      } 
     } 

だと私はビューでSelectProviderAndContact.aspxを作成しました。

いずれか1つは、アヤックスからのSelectProviderAndContact.aspx と別ウィンドウで開きます。

答えて

0

jqueryは、ウィンドウを開く際にほとんどすべての作業を行う必要があります。あなたのjavascriptのwindow.open()メソッドを使用すると、特定のURL(つまり、TheSmallPopupPageThatViewsResults.aspx?resultId=12345など)を持つ新しいウィンドウを開く特定の引数をコントローラに返すことができます。

あなたのコントローラは、新しいウィンドウを開くようにビューに指示するかどうかを決定するだけで、指示された場合はビューが開きます。

特定の実装では、コントローラが結果を保存できるように、結果をデータベースに保存するモデルや何かを作成しなければならない場合があります。ポップアップページのアクションとビューはその結果にアクセスできます。それを行うもう1つの方法は、ポップアップページが呼び出される引数をページ上で表示されるものにすることです。これは別のモデルの必要性を排除しますが、多くのデータを持っていればあなたのURLは本当に早くなる可能性があり、そのURLの長さには一般的に限界があると私は信じています。

返されたオブジェクトを必要に応じて拡張できるように、JSONまたはXMLを使用してデータをJavaScriptに戻すことをお勧めします。私が過去に行ったやり方は、<alert>,<refresh><redirect><somePageSpecificAction>など、いくつかのXMLタグを作成しました。これは、$(theEnclosingTag).each(function() { //...parse here })を使ってjqueryを解析したものです。

私は主にMVC3を使用していますので、MVC2でサポートされているかどうかわかりませんが、戻り値の型としてActionResultをJsonResultに変更し、return文にreturn this.Json(new { put = "data here" });を使用するとjsonを使いやすくなります。

また、別のアクションメソッドを使用してajaxリクエストを処理すると効果的です。ページを表示する1つのアクション、そのページからのajaxリクエストを処理する別のアクション([HttpPost]などで装飾可能)、およびポップアップページビューの別のメソッドがあります。それはあなたのコードを短くて読みやすくします。あなたが特定のバグの場所を見つけようとするときに、長いコントローラメソッドを持つことは、後で本当に混乱する可能性があります。

EDIT:具体例:MVC3を想定しています(これは私が使用しているものなので、これを行う他の方法があると思います... xmlシリアライザを使用してxmlを出力できます) (アクション#1)はすべてのボタンと物事で表示されます(これは$( "#DeleteButton")を含むjavascriptなどです)。あなたのjavascriptは、AJAX呼び出しを別のアクション(SelectContactAJAXまたは何か...これはアクション#2)で返します。戻り値の型はJsonResultです。あなたのjavascriptは、そのAjax特有のアクションから応答を返し、レスポンスは "URL/SelectContactForm?choiceId = 12345"(または何か)のウィンドウを開きます。 choiceIdは、何を表示するかを知るために、SelectContactFormアクション(さらに別の別個のアクション...アクション#3)のバックグラウンドで使用されるリファレンスです。あなたのajaxはwindow.open( "/ SelectContactForm?choiceId = 12345 ")、ウィンドウが開くと、アクション#3が呼び出され、表示される内容の参照を検索してユーザーに表示します。

ユーザーが入力した内容をフィードバックする新しいウィンドウと元のページが反応すると、JavaScriptがウィンドウの終了などを聞くためのさまざまな方法がありますが、これを私のアプリケーションで使用する必要はありませんでした。この質問の範囲外です。で

+0

おかげで非常にあなたの説明た.ascxページです。上記の条件を達成するための例を私に与えることができますので、大きな助けとなるでしょう – user1245777

+0

私は上記のより具体的な例を追加しました。私はそれが助けて欲しい –

0

使用カラーボックスのjQueryプラグイン

http://www.jacklmoore.com/colorbox

ライトコード。

parent.$.fn.colorbox({ href: '/IGTR/SaveIGTRPreference/' + id + '?t=' + Math.random(), height: "400", width: "800", overlayClose: false, escKey: false 
     }); 

た.ascxページを呼び出すためのaspxページはこちらSaveIGTRPreferenceは

関連する問題