__doPostBack()函数无法工作(asp.net)

3

我想从JS代码中触发按钮事件。但是JS函数reg()中的doPostBack没有指向C#代码。请告诉我出了什么问题。 下面是我的代码:

<script>
        function reg() {
            var name = document.getElementById('name').value;
            var id = document.getElementById('cnic').value;
            var age = document.getElementById('age').value;
            var ph = document.getElementById('phone').value;
            var pas = document.getElementById('pass').value;
            if (id == '' || pas == '' || age == '' || ph == '' || pas == '')
                window.alert("Write all fields");
            else {
                __doPostBack('<%= Button1.UniqueID%>','')
            }
        }
    </script>  


 <div >
       <asp:Button id="Button1" OnClientClick="reg()" runat="server" Text="Submit"/>
    </div>

这是与按钮相关的服务器端C#函数:
 protected void Btn_Click(object sender, EventArgs e)
    {
        Button clickedButton = (Button)sender;
        clickedButton.Text = "...button clicked...";
    }

注意:在 else 代码块中,我想要 reg() 函数重定向到 Btn_Click 函数。
2个回答

2

我有一段时间没有做这个了,但是我认为需要的是按钮的服务器Id,而不是客户端Id。

 __doPostBack('<%= button1.UniqueID%>','')

返回 true 后,它将如何进入 Btn_Click 函数?我没有在任何地方指定。 - Hashir Sarwar
我已经有一段时间没有做WebForms了,所以可能会有错误。除了onclientclick之外,您可能还需要指定onclick属性。无论如何,答案的第一部分是正确的。 - Sean T
我刚刚想起来,如果在客户端点击事件中返回 true,则会进入服务器端的点击事件,并且由于它是提交按钮,因此将被发布。 - Sean T
@HashirSarwar只需在按钮上添加一个click属性,然后调用服务器端函数,并在“write all fields”行下面加上return false - Sean T

2

看起来你在asp:Button中缺少OnClick事件。

<asp:Button id="Button1" OnClientClick="reg()" runat="server" Text="提交" OnClick="Btn_Click"/>

ASP.NET中有一个内置方法来生成__doPostBack()方法。

<%= Page.ClientScript.GetPostBackEventReference(Button1, String.Empty) %>; 

如果在更改后仍然无法正常工作,我建议您使用浏览器调试工具的网络选项卡(或Fiddler)检查网络流量,以便在单击按钮时进行检查。
此外,在reg()方法内设置断点以查看控制流程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接