PetShop 首页
<asp:Panel ID="panFocus" runat="server" DefaultButton="btnSearch"></Panel> Panel控件可以设置DefaultButton值用来捕获默认的回车符号
接下来分析其中的NavigationControl控件
<HeaderTemplate> <table cellspacing="0" border="0" style="border-collapse: collapse;"> </HeaderTemplate> <ItemTemplate> <tr> <td class="<%= ControlStyle %>"><asp:HyperLink runat="server" ID="lnkCategory" NavigateUrl='<%# string.Format("~/Products.aspx?page=0&categoryId={0}", Eval("Id")) %>' Text='<%# Eval("Name") %>' /><asp:HiddenField runat="server" ID="hidCategoryId" Value='<%# Eval("Id") %>' /></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate>
HyperLink用了NavigateUrl='<%# string.Format("~/Products.aspx?page=0&categoryId={0}", Eval("Id")) %>'来作为Url绑定。
其中<table>标签可以放在HeaderTemplate里,</table>可以放在FooterTemplate中
<td class="<%= ControlStyle %>"> 可以从后台取样式到前台,也可以取一些值放在前台的隐藏框里以供Js调用
Request.ServerVariables["SCRIPT_NAME"].ToLower().IndexOf("default.aspx") > 0 用来判断Url中是否存在default.aspx。如http://localhost/WebSite23/Default.aspx?id=3&cat=65
Response.Write(Request.ServerVariables["SCRIPT_NAME"]); // WebSite23/Default.aspx Response.Write(Request.ServerVariables["QUERY_STRING"]); //id=3&cat=65 Response.Write(Request.ServerVariables["ALL_HTTP"]); //All HTTP headers sent by the client Response.Write(Request.ServerVariables["ALL_RAW"]); // Same Response.Write(Request.ServerVariables["APPL_PHYSICAL_PATH"]); // 物理路径E:\PJ\项目\代码\IMS\WebSite23\ Response.Write(Request.ServerVariables["HTTP_URL"]); // /WebSite23/Default.aspx?id=3&cat=65 Response.Write(Request.ServerVariables["HTTP_USER_AGENT"]); // 浏览器Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) Response.Write(Request.ServerVariables["URL"]); // /WebSite23/Default.aspx
HiddenField 中隐藏了每一个分类的Id,如果在Url中有传分类的值,则从后台获取
if (!string.IsNullOrEmpty(categoryId))
SelectCategory(categoryId);
并且通过以下方法进行选取
private void SelectCategory(string categoryId) { foreach (RepeaterItem item in repCategories.Items) { HiddenField hidCategoryId = (HiddenField)item.FindControl("hidCategoryId"); if(hidCategoryId.Value.ToLower() == categoryId.ToLower()) { HyperLink lnkCategory = (HyperLink)item.FindControl("lnkCategory"); lnkCategory.ForeColor = System.Drawing.Color.FromArgb(199, 116, 3); break; } } }
先遍历RepeaterItem控件,迭代获取每次隐藏的hidCategoryId值,如果和Url中的相匹配,则将lnkCategory的颜色改变。
private void BindCategories() { Category category = new Category(); repCategories.DataSource = category.GetCategories(); repCategories.DataBind(); }
数据绑定的时候可以用List,而且List也可以用IList,通过面向接口来编程,降低耦合性。这样能进行很好的封装,不建议绑定table。