加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET / Java – 脚本注册/重定向问题

发布时间:2020-12-16 06:53:47 所属栏目:asp.Net 来源:网络整理
导读:我的页面上有一个提交按钮(服务器端按钮). 这是我点击事件的代码: protected void SubmitButton_Click(object sender,EventArgs e){ db.SaveSomething(); Page.ClientScript.RegisterStartupScript("someScriptWhichReliesOnServerData"); Response.Redirec
我的页面上有一个提交按钮(服务器端按钮).

这是我点击事件的代码:

protected void SubmitButton_Click(object sender,EventArgs e)
{
    db.SaveSomething();
    Page.ClientScript.RegisterStartupScript("someScriptWhichReliesOnServerData");
    Response.Redirect("SomeOtherPage.aspx");
}

现在,问题是,我使用Page.ClientScript.RegisterStartupScript注册JavaScript,但这不起作用,因为页面没有在回发时重新呈现(这是脚本将被执行的地方),因为而是响应.重定向发生.

我能想到的唯一解决方案是让页面重定向到“意识到”我试图执行一些JavaScript,无论是QueryString,HttpContext.Current.Items还是(gulp)Session.

> QueryString – 不是一个选项,因为它是我试图执行的JavaScript.
> HttpContext.Current.Items – 也不是一个选项,因为我正在做一个Response.Redirect(它丢失了请求级数据,我也不能使用Server.Transfer,因为这对URL重写不起作用).
>会议 – 当然,但并不理想.

还有其他想法/建议吗?

编辑澄清:

JavaScript即时执行是对Facebook客户端API的调用,以发布到用户的墙上.它必须在客户端完成.我传递给脚本的东西,如“标题”,“消息”,“动作链接”等.基本上是一堆JSON.但关键是这个数据是在回发时创建的,所以我不能在客户端点击时执行这个功能.

所以我试图完成的是提交按钮单击,执行一些JavaScript并执行重定向(不必按顺序,只需要发生).

解决方法

我认为你所经历的是两种不同范式的不幸冲突.一方面,你有一个你想要利用的AJAX风格的API,另一方面你有ASP.Net页面回发模型.

现在,虽然这两者并不相互排斥,但它可能会带来一些挑战.我同意Dan,你最好的选择是更倾向于采用AJAX方法,而不是相反.

ASP.Net的一个很好的功能是能够将页面中的单个静态方法转换为伪Web服务.然后,您可以使用ScriptManager生成客户端代理类以便为您调用该方法,但您可以使用whatever client side library you want.

一个非常简单的例子:

在你的代码隐藏页面

[WebMethod]
public static Person GetPerson(Int32 id,String lastName)
{
    return DataAccess.GetPerson(id,lastName);
}

如果您使用ASP.Net AJAX库来为您处理此问题,那么您需要启用页面方法来生成客户端代理.

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

然后你可以从客户端脚本调用它,如下所示:

function CallGetPerson() 
{
     var id = $get("txtPersonId").value;
     var lastName = $get("txtLastName").value;
     // PageMethods is a class that is part of the ASP.Net AJAX
     // client-side libraries and will contain your auto-generated
     // proxy methods for making XHR requests.
     PageMethods.GetPerson(id,lastName,OnGetPersonComplete);
}

function OnGetPersonComplete(result)
{
    faceBookApi.DoSomeStuffWithJson(result);
    window.location = "NewPage.aspx";
}

再说一次,这是一个人为的例子,你发布到服务器的内容可能非常复杂,但是你可以大致了解使用内置框架组件可以实现什么.

我希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读