首页 > 解决方案 > 我的下拉菜单将自动回发设置为打开,它根据选择填充文本框字段,但它也在重新加载其他回发事件

问题描述

我有一个所有者下拉菜单,当用户选择所有者时,它会自动填充 前提 ID 文本字段。我想修改 ifPostBack 的代码,这样当我回去更改所有者时它不会刷新 loadOtherSpecimenType。

我无法修改 OnSelectedIndexChanged 方法,因为它在页面上一次又一次地调用。

我的 aspx 文件:

<div class="row form-group form-group-sm">
<div class="col-xs-2">
<asp:Label ID="lblOwner" CssClass="control-label" runat="server" 
      Text="*Owner:"></asp:Label
  </div>
<div class="col-xs-4">
<asp:DropDownList ID="ddlOwner" aria-label="Owner" runat="server" 
    AutoPostBack="true" EnableViewState ="true" CssClass="form-control" 
    OnSelectedIndexChanged="ddlOwner_SelectedIndexChanged" >
    </asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvOwner" runat="server" Enabled="true"
     SetFocusOnError="true"
     ErrorMessage="Required" InitialValue="0" ControlToValidate="ddlOwner" 
     ForeColor="Red"
     ValidationGroup="vGrpPreview" EnableClientScript="true"
     Display="Dynamic"></asp:RequiredFieldValidator>
     </div
     </div>

aspx.cs 文件:

protected void Page_Load(object sender, EventArgs e)
    {  //Some code here

                if (IsPostBack)
                {
                  Console.WriteLine("");
                    loadOtherSpecimenType();
                    Console.WriteLine("");
                }
                if (!IsPostBack)
                {
                    /*
                     If (guuest){
                        load textboxes for DVM, Billing Owner, Copty To
                    }
                    else { //code below */
                    getDdlDVM();
                    getDdlBillTo();
                    getDdlCopyTo();
                    getDdlOwner();
                    getDdlSpecies();
                    var referer1 = HttpContext.Current.Request.UrlReferrer;

我的 OnSelectedIndexChanged 函数:

 protected void ddlOwner_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string _username = "";
            if (Session["username"] != null)
            {
                _username = Session["username"].ToString();
            }
            if (_username != string.Empty)
            {
                if (dbconn.State != ConnectionState.Closed)
                {
                    dbconn.Close();
                }
                dbconn.Open();
                string owner = QuoteHandler(this.ddlOwner.SelectedItem.ToString());

                string query = "select * from ( " +
                     "SELECT  b.id,b.premiseID,b.lname,b.fname,b.lname +case when len(b.fname)> 0 then ', ' + b.fname else '' end + " +
                                    "case when len(b.mname)> 0 then ' ' + b.mname else '' " +
                                    "end + ' - ' + b.city + ', ' + b.state as ddlOwner,[OwnerKey] " +
                                    "from [ADRDL_OwnerInfo] AS b INNER JOIN [ADRDL_ClinicInfo] AS c   " +
                                    "ON c.ClinicKey=b.ClinicKey " +
                                    "WHERE username='" + _username + "' and b.[adminAction]= 'Active' and b.OwnerKey is not null) t where ddlOwner= '" + owner + "';";

                cmd = new SqlCommand(query, dbconn);
                tablerdr = cmd.ExecuteReader();

                if (tablerdr.HasRows)
                {
                    while (tablerdr.Read())
                    {
                        ddlPremiseID.Text = tablerdr["premiseID"].ToString();
                    }
                    tablerdr.Close();
                }

            }
        }

        catch (Exception ex)
        \\code for catch statement
        \\end of code

我可以对我的 Page_Load 函数做些什么来确保当我更改 Owner 选择时回发不会重新加载 loadSpecimenType 函数。

标签: javascriptc#.net

解决方案


这是关于如何修改以防止在引发自动Page_Load回发时触发某个功能的一般方式或概念 - 这可能不完全适合您的用例,但它说明了预期使用的方式,您应该能够根据您的特定要求对其进行定制:ddlOwner__EVENTTARGET

注意:我在您的原始帖子中观察到您为OnSelectedIndexChangedfor定义了一个事件处理程序ddlOwner,但未显示该处理程序,所以我不能说它是否需要修改。

void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        // If we are posting back, AND the inducing postback control is *NOT* 
        // the owner dropdown, reload the specimen type
        if (Request.Form["__EVENTTARGET"] != ddlOwner.ClientID)
        {
            loadOtherSpecimenType();
        }else
        {
           // other code here //
        }
   } 
   else
   {
      // code for non-postback load here
   }
}     

推荐阅读