我设法为过滤gridView做了一个糟糕的借口,当我输入一个不返回任何内容的值时,它几乎可以工作。
例如,假设我有值11,12,23和24.如果我在文本框中输入'1',我只会看到'11'和'12'(即使结果是打开的,这也有效)不同的页面)。当我删除'1'时,我将再次看到所有值。优良!但是如果我输入'3'它会返回一个空表(到目前为止很好),当我删除3时......仍然是空的!有谁知道这是为什么?
这是我的(重要)代码:
ASP
<asp:HiddenField ID="hfText" runat="server" ClientIDMode="Static" />
<input type="text" id="input" style="width: 66px;"/>
<asp:GridView ID="myGv" runat="server"
ShowFooter="True"
AutoGenerateColumns="False" AllowPaging="true" AllowSorting="True"
DataKeyNames="DataKeyId" DataSourceID="ObjectDataSource1" >
<Columns>
<asp:BoundField DataField="DataKeyId" HeaderText="DataKey" Visible="false" InsertVisible="False" ReadOnly="True" SortExpression="DataKeyId" />
<asp:BoundField DataField="header1" HeaderText="Header1" SortExpression="header1" ReadOnly="True" />
<asp:BoundField DataField="header2" HeaderText="Header2" SortExpression="header2" ReadOnly="True" />
</Columns>
<EmptyDataTemplate>
No data found!
</EmptyDataTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="mySelectMethod" TypeName="WhereItsAt" >
<SelectParameters>
<asp:Parameter Name="header1" Type="String" Defaultvalue="" />
</SelectParameters>
</asp:ObjectDataSource>
的jQuery
$(document).ready(function () {
/* This piece of code just makes sure that the text remains after postback */
$('#input').val($('#hfText').val());
$('#input').focus();
var textval = $('#input').val();
$('#input').val("");
$('#input').val(textval);
/*******************/
$('#input').keyup(function (event) {
$('#hfText').val($('#input').val()).trigger('change');
__doPostBack('thisUrl.aspx', $('#input').val());
});
});
});
C#(代码落后)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myGv.DataBind();
}
else
{
if (!Request["__EVENTARGUMENT"].Contains("Page$"))
{
reBind(Request["__EVENTARGUMENT"]);
}
}
}
protected void reBind(String sParam)
{
ObjectDataSource1.SelectParameters.Remove(ObjectDataSource1.SelectParameters["header1"]);
ObjectDataSource1.SelectParameters.Add("header1", sParam);
myGv.DataBind();
}
(希望这不是TL; DR)
修改 输入一个不返回任何值然后输入一个应该返回的值的值后,我得到javascript错误“ReferenceError:__ doPostBack未定义”!
答案 0 :(得分:0)
发现了一种超级解决方案!
我所要做的就是在我的页面加载中添加ClientScript.GetPostBackEventReference(this, string.Empty);
,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myGv.DataBind();
}
else
{
ClientScript.GetPostBackEventReference(this, string.Empty);
if (!Request["__EVENTARGUMENT"].Contains("Page$"))
{
reBind(Request["__EVENTARGUMENT"]);
}
}
}