这似乎很容易,但最后几个小时就被卡住了。我有一个触发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
答案 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>