如何在asp.net中使用__doPostBack函数
本文关键字:doPostBack 函数 asp net | 更新日期: 2023-09-27 18:12:13
我试图使用__doPostBack
函数,所以我可以强迫我的页面在页面加载上做post pack,但我有一些困难理解。
当我在网上看例子的时候。在按钮单击,我想做的帖子回来,但不知道如何完成代码后面的代码。
下面是我到目前为止的记录:
<script type="text/javascript">
function DoPostBack() {
__doPostBack('btnNew', 'MyArgument');
}
</script>
这是我的按钮
<asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" OnClick="DoPostBack()" Text="Create" />
我似乎不明白在后面的代码中使用"MyArgument"。我需要做什么在后面的代码,所以它张贴回页面加载?提前感谢您的协助。
场景1
如果你想使用JavaScript函数来触发回发,你需要用OnClientClick
替换OnClick
。像这样修改按钮定义(我已经假设它嵌套在UpdatePanel
中):
<asp:Button ID="btnNew"
runat="server"
CausesValidation="False"
CommandName="New"
OnClientClick="DoPostBack();"
Text="Create" />
后面的代码中,在Page_Load
方法中,读取Request["__EVENTTARGET"]
和Request["__EVENTARGUMENT"]
:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (Request["__EVENTTARGET"] == "btnNew" &&
Request["__EVENTARGUMENT"] == "MyArgument")
{
//do something
}
}
}
场景2
如果你不想使用JavaScript,修改按钮的定义如下:
<asp:Button ID="btnNew"
runat="server"
CausesValidation="False"
CommandName="New"
OnClick="DoPostback"
CommandArgument="MyArgument"
Text="Create" />
然后,在后面的代码中添加以下方法:
protected void DoPostback(object sender, EventArgs e)
{
var target = ((Button)(sender)).ClientID; //"btnNew"
var argument = ((Button)(sender)).CommandArgument; //"MyArgument"
if (target == "btnNew" &&
argument == "MyArgument")
{
//do something
}
}
作为参数传递给函数__doPostBack
的值将作为名为__EVENTTARGET
和__EVENTARGUMENT
的请求参数发送给服务器。ASP。NET使用这些值来确定哪个控件触发了事件,以及应该将哪些参数作为EventArgs
对象传递。但是您可以使用对象HttpRequest
:
string eventTarget = this.Request.Params.Get("__EVENTTARGET");
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT");
Net为您提供了一种方法来构建调用以从javascript执行PostBack。
ClientScriptManager。GetPostBackEventReference方法将构建您需要在javascript中使用的代码,以便从特定控件执行PostBackhttp://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx
下面是一个例子(在VB.Net中)。在代码隐藏部分,我创建了自己的javascript函数。ASP。Net代码将在我的函数中插入javascript代码,以执行"MyButton"控件的PostBack。当页面构建完成后,这个javascript函数将可用。当javascript代码调用这个javascript函数时,它将执行PostBack,这将模仿点击"MyButton"按钮时发生的动作。Dim csm As ClientScriptManager = Page.ClientScript
Dim sb As New StringBuilder
sb.AppendLine("function handleDoPostBack() {")
sb.AppendLine(csm.GetPostBackEventReference(MyButton, ""))
sb.AppendLine("}")
csm.RegisterClientScriptBlock(Me.Page.GetType, "js_code__create_functions", sb.ToString, True)
希望这就是你想要的。
下面是一个如何调用在服务器端为您创建的javascript函数的示例。
<input type="button" value="Click Me" onclick="handleDoPostBack();" />
我只是做了一个普通的HTML按钮(而不是使用ASP。Net按钮),因为我不想让按钮PostBack的概念与它混淆。这是一个简单的HTML按钮,除了您为它编写的程序之外,它什么也不做。由于我已经向onclick添加了javascript函数调用,因此当您按下按钮时,它将执行PostBack。当这个PostBack发生时,它就像点击了"MyButton"按钮一样;这就是ASP。Net按钮,你在页面上的某个地方。由于该按钮是ASP。. Net按钮,它已经在自己做一个PostBack,这就是为什么我认为有一些混乱,为什么你要寻找触发一个PostBack编程。
你也可以在代码中直接调用javascript函数,如…
<script>
handleDoPostBack();
</script>
这将在代码遇到它时立即发生。或者,如果将它放在onload事件中,那么它将在页面加载完成时被调用。但就像我在评论中提到的,你必须小心,因为你可能会以一个无限循环结束。
通过阅读您在其他回答中的一些评论,您试图解决的问题似乎与您正在使用的AJAX面板有关。我不熟悉那些,所以我不知道为什么它不适合你,我不知道是否触发PostBack编程会解决你的问题。
但是,如果您确实需要以编程方式触发PostBack,则可以使用以下代码。我使用它的情况下,我不希望一个按钮在页面上,但我想要一个动作发生。当我的页面上发生其他事情时,我运行一些javascript代码,就像点击了一个按钮一样——我可以在服务器端处理这个按钮点击。在我的ASP。在Net页面中,我确实包含了按钮,但随后我使用CSS隐藏用户,使其看不到按钮。所以用户看不到按钮,但我的javascript代码可以调用我的javascript函数,它将模拟点击按钮
下面的代码可以让我使用c#进行回发。请注意,我没有使用'MyArgument'参数并将其保留为空
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true);
,
<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" />
希望这对你有帮助!