0

ASP.Net MVC2 を使用しています。Jquery Ajaxポストコールからコントローラーを呼び出すときに、新しいウィンドウを開こうとしています。ここに私のコードがあります..ascxページにあります..

$('#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そして私は眺めて創造しました。

SelectProviderAndContact.aspx ajaxポストコールから別のウィンドウを開くのを手伝ってください。

4

2 に答える 2

0

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

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

特定の実装では、コントローラーが結果を保存し、ポップアップ ページのアクションとビューがその結果にアクセスできるように、結果をデータベースに格納するモデルまたは何かを作成する必要がある場合があります。これを行う別の方法は、ポップアップ ページが呼び出されたときにページに表示される内容を決定する引数を持たせることです。これにより、別のモデルが不要になりますが、大量のデータがある場合、URL が非常に速く長くなる可能性があり、一般的にこれらの URL の長さに制限があると思います。

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

主に MVC3 を使っているので MVC2 でサポートされているかどうかはわかりませんが、戻り値の型を ActionResult から JsonResult に変更しreturn this.Json(new { put = "data here" });、return ステートメントに を使用すると、非常に簡単に json を使用できるようになります。

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

編集:具体的な例:MVC3を仮定すると(それが私が使用しているため...これを行う他の方法を見つけることができると思います... xmlシリアライザーを使用してxmlを出力するだけです)あなたのページがあります(アクション#1 )すべてのボタンやものを表示します(これは、$( "#DeleteButton")などを含むjavascriptも同様です)。あなたのJavaScriptは、JsonResultの戻り型を持ついくつかの引数を使用して、別のアクション(SelectContactAJAXまたは何か...これはアクション#2です)へのAJAX呼び出しを行います。JavaScript はその ajax 固有のアクションから応答を取得し、応答は「URL /SelectContactForm?choiceId=12345 でウィンドウを開く」(または何か) ことを伝えます。choiceId は、何を表示するかを知るために SelectContactForm アクション (さらに別のアクション...アクション #3) のバックグラウンドで使用される参照です。

ユーザーが新しいウィンドウに入力した内容に関するフィードバックを取得し、元のページを反応させることに関しては、JavaScript でウィンドウのクローズなどをリッスンするさまざまな方法がありますが、アプリケーションの 1 つでこれを使用する必要はありませんでした。この質問の範囲外です。

于 2012-04-13T16:14:04.407 に答える
0

カラーボックス jquery プラグインを使用する

http://www.jacklmoore.com/colorbox

.aspx ページにコードを記述して .ascx ページを呼び出す

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

ここで SaveIGTRPreference は .ascx ページです

于 2012-04-18T05:31:45.140 に答える