C# ASP.NET无法在不使用不可见按钮的情况下进行搜索

C# ASP.NET无法在不使用不可见按钮的情况下进行搜索,c#,asp.net,C#,Asp.net,我正在尝试创建我的第一个ASP.NET网站,如果不使用不可见的按钮,我将无法在ASP.NET web窗体中进行搜索和分页。我无法使用我的搜索按钮的单击事件,因为它需要在单击时将我的页面重置为0,因此它只有一个客户端单击事件。我必须让它调用一个JavaScript函数,在这样做之后调用不可见按钮的click事件处理程序。我唯一能解决这个问题的方法是使页面返回到自身,并从底部分页表传递索引。希望这里有人能对更简单的方法提出一些建议。提前感谢您的建议。如果不是分页,它将是我的按钮单击事件处理程序中的一

我正在尝试创建我的第一个ASP.NET网站,如果不使用不可见的按钮,我将无法在ASP.NET web窗体中进行搜索和分页。我无法使用我的搜索按钮的单击事件,因为它需要在单击时将我的页面重置为0,因此它只有一个客户端单击事件。我必须让它调用一个JavaScript函数,在这样做之后调用不可见按钮的click事件处理程序。我唯一能解决这个问题的方法是使页面返回到自身,并从底部分页表传递索引。希望这里有人能对更简单的方法提出一些建议。提前感谢您的建议。如果不是分页,它将是我的按钮单击事件处理程序中的一行代码

以下是我的页面的相关标记

<script language="javascript">
    function page(index) 
    {
        document.getElementById('PageIndex').value = index;
        document.getElementById('btnInvisible').click();
    }
</script>
<uc1:ucWidgetSearch runat="server" id="ctl" />
<p id="pHTML" runat="server"/>
<asp:Button ID="btnInvisible" runat="server" BackColor="White" 
    BorderStyle="None" BorderWidth="0px" OnClick="btnInvisible_Click" />
<asp:HiddenField ID="PageIndex" runat="server" /
下面是UserControl的代码。它还使用no-use语句

namespace Widgets.WebUI
{ public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, System.EventArgs e)
        { ScreenHelper.LoadScreen(ctl.Search(), pHTML, PageIndex);}
        protected void btnInvisible_Click(object sender, System.EventArgs e)
        { }
    }
}
public partial class ucWidgetSearch : System.Web.UI.UserControl
{
    internal Widgets.BLL.WidgetSearch Search()
    {
        if (!txtLastName.Enabled)
        {
            txtLastName.Enabled = true;
            txtLastName.Focus();
            return null;
        }
        return new Widgets.BLL.WidgetSearch(txtLastName.Text);
    }
}
最后,有一个ScreenHelper类调用BLL层,该类调用DAL层并构造一个HTML文档并将其传递到主页上的p元素中

internal class ScreenHelper
{
    internal static void LoadScreen(WidgetSearch search, 
        System.Web.UI.HtmlControls.HtmlGenericControl p, HiddenField page)
    {
        if (search != null)
        {
            try
            {
                p.InnerHtml = WidgetsLogic.GetHTMLTable(search.LastName, int.Parse(page.Value), 20);
            }
            catch (System.Exception ex)
            {
                p.InnerHtml = "<label style=\"color: #FF0000\">Error loading screen: " + ex.Message + "</label>";
            }
        }
    }
}

namespace Widgets.BLL
{
    public class WidgetsLogic
    {
        public static string GetHTMLTable(string name, int pageIndex, int? pageSize)
        {
            StringBuilder strBuilder = new StringBuilder("<table border=\"1\">");
            List<Widget> list = WidgetsDataAccess.GetByName(name);
            int minDex = 0, maxDex = list.Count;

            if (pageSize == null)
            {
                pageIndex = 0;
            }
            else
            {
                pageIndex = HTMLHelper.GetPageIndex(pageIndex, pageSize.Value, list.Count);
                minDex = pageIndex * pageSize.Value;
                maxDex = minDex + pageSize.Value;
                if (maxDex > list.Count)
                    maxDex = list.Count;
            }

            for (int i = minDex; i < maxDex; i++)
            {
                strBuilder.Append("<tr");

                // Set Light Gray Color for alterating rows in table
                if (i%2 != 0) 
                    strBuilder.Append(" style=\"background-color: #EBEBEB\"");

                strBuilder.Append("><td>" + list[i].ID.ToString() + "</td>");
                strBuilder.Append("<td>" + list[i].Name + "</td></tr>");
            }

            strBuilder.Append("</table>");

            // Add Paging if appropriate
            if (pageSize != null && pageSize.Value < list.Count)
            {
                strBuilder.Append(HTMLHelper.GetPagingFooter(pageIndex, pageSize.Value, 
                    list.Count, "javascript:page('@pageIndex')"));
            }

            string str = strBuilder.ToString();

            return str;
        }
    }
内部类ScreenHelper
{
内部静态无效加载屏幕(WidgetSearch,
System.Web.UI.HtmlControl.HtmlGenericControl,HiddenField页)
{
如果(搜索!=null)
{
尝试
{
p、 InnerHtml=WidgetsLogic.GetHTMLTable(search.LastName,int.Parse(page.Value),20);
}
catch(System.Exception-ex)
{
p、 InnerHtml=“加载屏幕时出错:“+ex.Message+”;
}
}
}
}
namespace Widgets.BLL
{
公共类WidgetsLogic
{
公共静态字符串GetHTMLTable(字符串名称、int-pageIndex、int-pageSize)
{
StringBuilder strBuilder=新StringBuilder(“”);
List List=WidgetsDataAccess.GetByName(名称);
int minDex=0,maxDex=list.Count;
if(pageSize==null)
{
pageIndex=0;
}
其他的
{
pageIndex=HTMLHelper.GetPageIndex(pageIndex、pageSize.Value、list.Count);
minDex=pageIndex*pageSize.Value;
maxDex=minDex+pageSize.Value;
if(maxDex>list.Count)
maxDex=list.Count;
}
对于(int i=minDex;i
您不应该尝试手动分页。而是使用
GridView
ObjectDataSource
将数据绑定到页面。这种方式ASP.NET通过viewstate处理pageIndex exc,而
ObjectDatasource
为您处理分页。请查看一个很好的示例,了解如何执行此操作。

用于引用HTML控件的实际ID

document.getElementById('<%= PageIndex.ClientID %>').value = index;
document.getElementById(“”).value=index;

为什么要在客户端执行“将我的页面重置为0”?为什么不将搜索按钮发布到服务器,并在返回搜索结果时将页面设置为零?我处理页面的方式是,我的BLL层在p元素的底部抛出一个表,其中有调用javascript函数的超链接单击并将页面作为参数传递,然后调用不可见按钮的单击。如果调用实际搜索按钮的单击,则会重置为0,因为“我的搜索”按钮总是将分页重置为0。
document.getElementById('<%= PageIndex.ClientID %>').value = index;