我有搜索功能。如果搜索字符串为空并且用户单击“GO”,则不应发生gridview的回发,并且警报(如下面的代码中所述)应该被激活。
我的gridview位于更新面板中。下面是我写的逻辑,但它不起作用。
protected void btnGo_Click(object sender, EventArgs e)
{
if (!txtSearchString.Text.Equals(string.Empty))
{
BinGrid();
upnl1.update //update panel is updated here.
}
else
{
ScriptManager.RegisterStartupScript(this.upnl1, this.GetType(), "Search", "alert('Enter search text');", false);
//upnlgvOpportinities.Update();
//upnlAdmin.Update();
return;
}
}
请帮忙!如果需要任何信息,请告诉我
答案 0 :(得分:4)
这种逻辑是错误的。如果你想在第一时间避免回发,它应该使用javascript。
当文本框为空时,您的javascript会返回false
,而当
true
会返回{/ 1}}
<asp:button runat="server".... OnClientClick="return myfunction(); " />
您可以在myfunction()
答案 1 :(得分:2)
如果您不希望向服务器发送请求(如果我理解您的需求正确),那么您需要一个客户端解决方案,即使用javascript处理按钮,并有条件地阻止回发。但是,您当前的代码是服务器端,并且在发布回发之后服务器上执行。
至于客户端,这是一种可行的方法。定义一个简单检查搜索框值的js函数,如果它为空则返回false
。在按钮上单击只需调用此功能。如果单击处理程序返回false
,则将停止进一步处理按钮单击并且不会发生回发:
function checkSearch() {
var searchBox = document.getElementById('HereComesSearchBoxClientID');
if (searchBox.value == '') {
alert('Enter search text');
return false;
} else {
return true;
}
}
<asp:Button ID="SearchButton" runat="server" Text="GO" OnClick="ServerSideHandler" OnClientClick="checkSearch();" />
答案 2 :(得分:1)
用下面的代码行替换ScriptManager行。
ScriptManager.RegisterStartupScript(this.upnl1, this.GetType(), "Script", "alert('Enter search text');", true);
答案 3 :(得分:0)
@Madhur Ahuja的方式是正确的。扩大了一点。
HTML
<asp:Button ID="txtSearchString" runat="server"
OnClientClick="javascript:return CheckifEmpty(this);" />
的Javascript
function CheckifEmpty(objSearchBox) {
//always trim, otherwise it will accept a string of spaces
var isEmpty = objSearchBox.value.trim() == "";
if (isEmpty) {
alert('Enter search text');
}
return !isEmpty;
}
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, "$1");
};
}