使用 JavaScript 在框架之间或弹出页面中提交 ASP.NET WebForm
本文演示了如何使用 javascript 在框架之间或弹出页面中提交 ASP.NET WebForm。
引言
首先,在阅读本文之前,请阅读 David Truxall 的“使用 JavaScript 提交 ASP.NET 表单”!对于大多数开发人员来说,在 .NET 1.x 中使用 ASP.NET 回发过程可能会遇到困难。 除了 David 的文章之外,本文还描述了如何使用灵活的 javascript 在框架之间或弹出窗口中进行发布。
背景
大多数 Web 开发人员都会考虑将 ASP.NET WebForm 发布到另一个 WebForm 页面(即通过框架或进入弹出 WebForm)。在企业 Web 解决方案中,我们有时会使用框架集。我知道使用框架集会降低性能。但是如果我们的客户想使用框架集,我该怎么办?
使用代码
我有一个框架集,它水平分为两个框架。一个的框架名称为“topFrame”,另一个为“bottomFrame”。当我在 TextBox 中输入一些文本并单击“topFrame”上的“Post to Bottom Frame”按钮时,它会发布“bottomFrame”页面。此外,当我单击“topFrame”上的“Post to Popup”按钮时,它会发布弹出页面(“PopupPage.aspx”)。
- 脚本函数说明
- fnPostBackBetweenFrames(postBackFormString, frameName, actionUrl)
:在框架之间发布 - fnPostBackBetweenPages(postBackFormString, actionUrl)
:在页面之间发布 - fnPostBackPopUp(postBackFormString, windowName, actionUrl, vWidth, vHeight)
:发布到弹出页面
// Client Script
function fnPostBackBetweenFrames(postBackFormString, frameName, actionUrl)
{
var postBackForm = eval(postBackFormString);
postBackForm.target = frameName;
postBackForm.action = actionUrl;
postBackForm.__VIEWSTATE.name = '';
postBackForm.method = "post";
postBackForm.submit();
return false;
}
// Server Code
string bottomFunction = String.Concat("javascript:return fnPostBackBetweenFrames('document.", formName, "','bottomFrame','BottomForm.aspx');");
btnPostFrame.Attributes.Add("onclick", bottomFunction);
fnPostBackBetweenFrames 脚本函数用于在框架之间发布,并且服务器代码(在后台类中)显示了注册“btnPostFrame”按钮的 onclick 事件函数的代码。
// Client Script
function fnPostBackBetweenPages(postBackFormString, actionUrl)
{
var postBackForm = eval(postBackFormString);
// Without a target property, a page will be posted from current page to "actionUrl" page.
postBackForm.action = actionUrl;
// if you want to pass the "__VIEWSTATE" value to other page, give your favorite name to a name property.
postBackForm.__VIEWSTATE.name = '';
postBackForm.method = "post";
postBackForm.submit();
return false;
}
fnPostBackBetweenPages 脚本函数用于在页面之间发布。 该脚本类似于 fn PostBackBetweenFrames 函数。
// Client Script
function fnPostBackPopUp(postBackFormString, windowName, actionUrl, vWidth, vHeight)
{
var postBackForm = eval(postBackFormString);
var wForm = ViewCenterPop("about:blank", windowName, vWidth, vHeight, 'no', 'no', 'no', 'no', 'no');
postBackForm.target = windowName;
postBackForm.action = actionUrl;
postBackForm.__VIEWSTATE.name = '';
postBackForm.method = "post";
postBackForm.submit();
wForm.focus();
return false;
}
// Server Code
string popupFunction = String.Concat("javascript:return fnPostBackPopUp('document.", formName, "','PopPostBackWindow','PopupPage.aspx',300,300);");
btnPostPopup.Attributes.Add("onclick", popupFunction);
fnPostBackPopUp 脚本函数用于发布到弹出页面,并且服务器代码(在后台类中)显示了注册“btnPostPopup”按钮的 onclick 事件函数的代码。
private void Page_Load(object sender, System.EventArgs e)
{
txaValues.Text = GetParamValue("txaContent");
}
如果数据发布到另一个 WebForm,只需使用自定义函数“GetParamValue(string sKeys)”(来自 BasePage.cs)处理 Request.Form 键即可。
关注点
此功能的关键点是重命名“__VIEWSTATE”。在 VS 2005 中,我们有一个跨页功能,但我不知道它是否解决了以前的发布处理问题。我迟早会用 VS 2005 测试跨页功能,如果需要,我将编写其他与发布处理相关的客户端脚本。