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