代码之家  ›  专栏  ›  技术社区  ›  AT-2017

单击按钮不会一次触发PostBackUrl

  •  1
  • AT-2017  · 技术社区  · 8 年前

    这看起来很简单,但在过去的几个小时里却被卡住了。我有一个搜索按钮,可以启动PostBackUrl。问题是,只有当我第二次单击搜索按钮时,它才会启动。以下是我所做的:

     protected void Page_Load(object sender, EventArgs e)
        {
            Page.Title = "View Cities - CcmApp";
    
            if (!IsPostBack)
            {
                BindGridView(0);
                BindPager(0);
    
                GetCountries();
            }
        } 
    
     protected void SearchButton_Click(object sender, EventArgs e)
        {
            City aCity = new City();
            aCity.CityName = nameTextBox.Text;
    
            if (nameTextBox.Text.Length == 0 && radioCityName.Checked == true)
            {
                labelMsg.Visible = true;
                labelMsg.Text = "No search term given";
            }
            else
            {
                SearchButton.PostBackUrl = GetDefaultUrl();
            }
    
            BindGridView(0);
            BindPager(0);
        }
    
     public string GetDefaultUrl()
        {
           return "SearchCity.aspx?SearchTerm=" + nameTextBox.Text;
        }
    

    默认.aspx:

    <asp:LinkButton ID="SearchButton" runat="server" Text="Search" ValidationGroup="vdGroup" 
    CssClass="btn btn-primary" OnClick="SearchButton_Click"></asp:LinkButton>
    

    我不确定是什么原因导致它再次单击以获取url。有什么办法克服它吗?

    注: 我希望在url中获得以下输出- http://localhost:1234/UI/SearchCity.aspx?SearchTerm=a 。但仅在第二次单击按钮时有效。当我第一次点击时,我得到了这个- http://localhost:1234/UI/SearchCity.aspx

    1 回复  |  直到 8 年前
        1
  •  3
  •   VDWWD    8 年前

    这个 PostBackUrl 按钮上的url仅在第一次PostBack之后设置。如果你能把它放进去 Page_Load 例如,您将看到它将在第一个PostBack上工作。

    如果您想要 ?SearchTerm= 仅当url中有内容时 nameTextBox 你可以用 Response.Redirect ?搜索词= .

    如果有以下情况,最好还是去客户那边看看 包含文本并阻止使用验证程序单击按钮。

    <asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="/Default.aspx?SearchTerm=" ValidationGroup="mySearch">Search</asp:LinkButton>
    
    <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="nameTextBox" ClientValidationFunction="checkLength" ValidateEmptyText="true" ErrorMessage="Min. 3 characters required" ValidationGroup="mySearch"></asp:CustomValidator>
    
    <script type="text/javascript">
        function checkLength(oSrc, args) {
            var v = document.getElementById("<%=nameTextBox.ClientID %>").value;
            if (v.length < 3) {
                args.IsValid = false;
            } else {
                $("#<%=LinkButton1.ClientID %>").attr("onclick", $("#<%=LinkButton1.ClientID %>").attr("onclick").replace("?SearchTerm=", "?SearchTerm=" + v));
                args.IsValid = true;
            }
        }
    </script>