1

我已经设法为过滤一个几乎可以正常工作的 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 is not defined”!

4

1 回答 1

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"]);
        }
    }
}
于 2013-07-25T06:08:51.670 回答