我正在使用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的电话会议。
答案 0 :(得分:0)
你的jquery几乎要打开一个窗口的所有工作。在javascript中使用window.open()
方法,您可以让控制器发回一个特定的参数,使其打开一个带有特定URL的新窗口(即TheSmallPopupPageThatViewsResults.aspx?resultId=12345
或其他东西)。
您的控制器将决定是否告诉视图打开新窗口,如果被告知,视图将打开它。
根据您的具体实现,您可能必须创建一个模型或将结果存储在数据库中的内容,以便控制器可以保存结果,然后弹出页面的操作和视图可以访问该结果。另一种方法是使用弹出页面调用的参数来确定页面上查看的内容。这将消除对另一个模型的需求,但如果您拥有大量数据,那么您的网址可能会非常快,并且我相信这些网址的长度通常有限。
我建议使用JSON或XML将数据返回到javascript,以便您可以根据需要扩展返回的对象。我过去的方式是使用<alert>
,<refresh>
,<redirect>
,<somePageSpecificAction>
等多个XML标记,我使用{{1}进行jquery解析}。
我主要使用MVC3所以我不知道MVC2是否支持它,但是将ActionResult更改为JsonResult以获取返回类型并使用$(theEnclosingTag).each( function () { //...parse here })
作为返回语句使得使用json非常容易。
此外,使用不同的操作方法处理ajax请求可能会有所帮助。然后,您将有一个显示该页面的操作,另一个用于处理来自该页面的Ajax请求的操作(可以使用[HttpPost]或其他东西进行修饰),以及另一个用于弹出页面视图的方法。这也可以使您的代码简短易读。当您尝试查找特定错误的位置时,使用较长的控制器方法可能会在以后发生混乱。
编辑:一个具体的例子:假设MVC3(因为这是我使用的......我认为你可以找到其他方法来做这个...你可以使用xml序列化器,只输出xml)你有你的页面(动作#1)显示所有按钮和内容(这是你javascript包含$(“#DeleteButton”)的地方也是如此)。你的javascript将AJAX调用到另一个动作(SelectContactAJAX或其他东西......这是动作#2),其中有一些参数的返回类型为JsonResult。你的javascript从特定于ajax的动作获得响应,并且响应告诉它“打开一个带有URL / SelectContactForm?choiceId = 12345”的窗口(或其他东西)。 choiceId是一个参考,将在后台用于SelectContactForm操作(另一个单独的操作...操作#3)以了解要显示的内容。然后你的ajax将调用window.open(“/ SelectContactForm?choiceId = 12345”),当窗口打开时,它会调用操作#3,它会查找它应该显示的内容,然后向用户显示该内容。至于获得用户在新窗口中输入的内容并让原始页面做出反应的反馈,javascript中有各种方式来监听窗口关闭等等,但是我从来没有必要在其中一个我的申请,这有点超出了这个问题的范围。
答案 1 :(得分:0)
使用colorbox 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页面