![](/img/trans.png)
[英]Client side keypress handling event, set focus function, and __doPostBack ASP.NET
[英]how to use __doPostBack function in asp.net
我正在尝试使用__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函数触发回发,则需要将OnClick
替换为OnClientClick
。 像这样修改按钮定义(我已经假设它嵌套在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");
ASP.Net提供了一种方法,您可以构建一个从javascript执行PostBack的调用。
ClientScriptManager.GetPostBackEventReference方法将构建您需要在javascript中使用的代码,以便从特定控件执行PostBack http://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)
希望这就是你要找的东西。
UPDATE
这是一个如何调用在服务器端为您创建的javascript函数的示例。
<input type="button" value="Click Me" onclick="handleDoPostBack();" />
我只是制作了一个常规的HTML按钮(而不是使用ASP.Net按钮),因为我不想让按钮的概念与PostBack混淆。 这只是一个HTML按钮,除了您要编程的内容之外什么都不做。 由于我已经将javascript函数调用添加到onclick,然后当您按下按钮时,它将执行PostBack。 当发生这个PostBack时,它会像点击“MyButton”按钮一样; 这将是一个ASP.Net按钮,你在页面的某个地方。 由于该按钮是一个ASP.Net按钮,它本身就已经自己做了一个PostBack,这就是为什么我认为你为什么要以编程方式触发PostBack的原因有些混乱。
您也可以直接在代码中调用javascript函数,因此......
<script>
handleDoPostBack();
</script>
一旦代码遇到它,就会发生这种情况。 或者,如果将它放在onload事件中,那么在页面加载完成后会调用它。 但就像我在评论中提到的那样,你必须要小心,因为你最终会得到一个无限循环。
通过阅读其他答案中的一些注释,您尝试解决的问题似乎与您正在使用的AJAX面板有关。 我不熟悉那些,所以我不确定为什么它不适合你,我不知道是否以编程方式触发PostBack将解决你的问题。
但是,如果您需要以编程方式触发PostBack,则可以使用此代码。 我在不希望页面上有按钮的情况下使用它,但我想要一个动作发生。 当我的页面上发生其他事情时,我会运行一些javascript代码,就像点击一个按钮一样 - 我可以在服务器端处理该按钮。 在我的ASP.Net页面中,我确实包含了按钮,但后来我使用CSS来隐藏用户看不到按钮。 所以用户没有看到按钮,但我的javascript代码可以调用我的javacript函数,它将模仿单击该按钮。
下面的代码适用于我使用C#进行回发。 注意我没有使用'MyArgument'参数并将其留空
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true);
哪里
<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" />
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.