从javascript中的代码调用函数而不回发

时间:2016-07-14 09:15:18

标签: javascript c# jquery asp.net postback

我有一个用户可以选择的客户列表。当他们选择客户时,我需要加载该客户的联系人。我需要从JavaScript调用该函数,所以我添加了一个按钮:

<asp:Button ID="btnSample" runat="server" style="float:right;display:none" OnClick="btnSample_Click" />   

然后该按钮从我的JavaScript函数触发:

function OnGetCustomer(result){
                document.getElementById('lblCustID').innerHTML = result.ID;
                document.getElementById('lblCustName').innerHTML = result.Name; 
                document.getElementById("btnSample").click();
}

加载联系人后面的代码:

protected void btnSample_Click(object sender, EventArgs e)
    {
        RateSheet r = new RateSheet(ID, Company.Current.CompanyID);
        if (!string.IsNullOrEmpty(lblCustID.Text))
        {
            Customer c = new Customer(int.Parse(lblCustID.Text));

            bool e2 = false;
            foreach (Customer.CustomerContact cc in c.Contacts)
            {
                HtmlGenericControl li = new HtmlGenericControl("li");
                CheckBox cb = new CheckBox();
                cb.ID = "cbCustContact_" + cc.ID;
                cb.Checked = true;
                if (!string.IsNullOrEmpty(cc.Email))
                {
                    cb.Text = cc.Email;
                    cb.TextAlign = TextAlign.Right;
                    li.Controls.Add(cb);
                    ulCustContacts.Controls.Add(li);
                }
            }
        }
    }

我需要lblCustID的值来查找客户的联系人。问题是按钮导致回发并且我丢失了我选择的客户,因此lblCustID总是返回零。如何停止回发以便我不会丢失任何值?

2 个答案:

答案 0 :(得分:2)

您可以使用异步调用来实现:

设置 AutoPostback =“false”以防止该按钮导致回发onclick

FileRepository

或者只是添加原始HTML按钮(注意:添加 type =“按钮”,否则会导致回发):

<asp:Button ID="btnSample" runat="server" style="float:right" AutoPostback="false" />

然后向此按钮添加一个事件监听器并执行ajax调用:

<button id="btnSample" type="button">Click</button>

注意:你必须将你的cobebehind代码移动到一个通用的处理程序来处理ajax调用并返回结果

答案 1 :(得分:1)

lblCustID是标签还是输入?在回发中保留更改的唯一*控件是输入。您可以使用<asp:HiddenField />或任何<input runat="server" ... />来发送要使用的代码的信息。

*与其他控件一起使用,例如下拉列表等