按钮单击不会启动PostBackUrl一次

时间:2016-09-14 11:26:34

标签: c# asp.net webforms controls

这似乎很容易,但最后几个小时就被卡住了。我有一个触发PostBackUrl的搜索按钮。问题是,当我第二次点击搜索按钮时,它才会启动。我在这里做了什么:

Default.aspx.cs:

 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;
    }

Default.aspx的:

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

我不确定是什么原因导致它第二次点击获取网址。有没有办法克服它?

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

1 个答案:

答案 0 :(得分:2)

按钮上的PostBackUrl网址仅在第一个PostBack之后设置。例如,如果您在Page_Load中设置它,您会发现它将在第一个PostBack上运行。

如果您希望仅当?SearchTerm=中有内容时才会在网址中显示nameTextBox,您可以使用Response.Redirect或接受?SearchTerm=中没有数据。

如果nameTextBox有文本并且阻止使用验证器点击按钮,最好还是检查客户端。

<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>