繁体   English   中英

单击按钮一次不会启动PostBackUrl

[英]On Button Click Does Not Fire Up The PostBackUrl Once

这似乎很简单,但持续了几个小时就卡住了。 我有一个搜索按钮,可以启动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>

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

注意:我希望在url中获得以下输出-http:// localhost:1234 / UI / SearchCity.aspx?SearchTerm = a 但仅在第二次单击按钮时有效。 当我第一次单击时,会显示以下内容-http:// localhost:1234 / UI / SearchCity.aspx

按钮上的PostBackUrl网址仅在第一个PostBack之后设置。 例如,如果您要在Page_Load进行设置,则会看到它可以在第一个PostBack上运行。

如果仅当nameTextBox有内容时才希望在URL中显示?SearchTerm= ,则可以使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM