一键执行客户端和服务器端代码?

4
我不确定我的设计是否有缺陷,但想知道别人的看法。我现在处于这样一种情况:我试图实现一次点击同时完成两个任务。
使用:ASP.NET Web表单
我有一个Web表单,里面有几个文本框、一个GridView控件和一个按钮。
如果我点击按钮,我会执行两件事:
1)从服务器异步获取数据到客户端(非常好用),并能够在文本框中显示数据。
2)同一次点击我想要绑定GridView。
<asp:Content ID="Content2" ContentPlaceHolderID="cphMaster" runat="server">
     <asp:Label runat="server" ID='Label1' >Id:</asp:Label>

        <asp:TextBox ID="txtId" runat='server'></asp:TextBox>

        <asp:Button ID="btnSubmit" OnClientClick="LoadDataById();" runat="server" Text="Submit" 
         onclick="btnSubmit_Click" />
        <br />
         <br />
        <asp:TextBox ID="txtName" runat='server'></asp:TextBox> <br />
        <asp:TextBox ID="txtPurpose" runat='server'></asp:TextBox>    <br />
     <br />

     <asp:GridView ID="GridView1" runat="server">
     </asp:GridView>
</asp:Content>

服务器端

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            GridView1.DataSource = laodData(int.Parse(txtId.Text));
            GridView1.DataBind();
        }

Jquery:

function LoadVisitBasicByVisitId() {


    ContactServiceProxy.invoke({ serviceMethod: "GetDataById",
        data: { request: request },
        callback: function(response) {

           processCompletedContactStore(response);
        },
        error: function(xhr, errorMsg, thrown) {
            postErrorAndUnBlockUI(xhr, errorMsg, thrown);
        }
    });
    return false;
} 

回顾:

1) jquery script execute asynchronously to get data from server to client and display in the textboxes
2) server side code to bind the gridview.

问题:

如果我使用 onClientClick="return LoadDataById();,那么它只会执行 ajax 代码而不会执行服务器端的代码。

但是如果我使用 onClientClick="LoadDataById();,那么它会同时执行客户端和服务器端的代码,但文本框的值会被清空。(文本框的值是通过 ajax 填充的)

2个回答

6
如果您的jQuery函数返回true,则服务器端代码将进行处理。返回false会阻止页面提交到服务器。此外,请设置您的onClientClick="return LoadDataById();"

我尝试过这个,但一旦服务器端代码执行,文本框的值就会消失。 - Nick Kahn
啊,你应该在后端代码中注册 ajax 调用脚本,这样页面就会刷新,然后异步调用将更新文本框。我相信你的页面在异步响应到达之前已经刷新了。 - derek
你会如何注册Ajax调用脚本? - Nick Kahn
使用Page.ClientScript.RegisterStartupScript - derek

0

我曾经用这种思路开发过一些东西,记得当时没有遇到任何问题。

但是如果你在jQuery中返回false,就不会发生postback。


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