0

我正在使用 asp.net gridview 来显示 mdb 文件中的数据列表。显示 5 列,大约有 240 行数据。每行显示“名字”、“姓氏”、“标题”、“类型”、“问题”和“id”。

每个“标题”条目都有对应的 .aspx 页。大约有 180 个实际的 .aspx 页面对应于网格中的“标题”条目。这种关系的一个例子是:title = "Once Upon a time in a long story"; aspx 页面可能是/alongstory.aspx。

我想要完成的事情:允许用户单击网格上的标题字段并打开相应的 .aspx 页面。

到目前为止我所做的:在“标题”字段上创建了一个 aspLabel - Text='<%#Eval("Title") %>'; 并为标签加载事件添加了 C# 代码:

    aspLabel l = sender as aspLabel;
    l.ClientsideEvents.Click = String.Format("function(s,e) {{window.location = \"{0}"; }}, GetPageUrl(l));

和 GetPageUrl:

     Private string GetPageUrl(aspLabel l)
     {GridViewDataItemTemplateContainer c = l.NamingContainer as GridViewDataItemTemplateContainer:
    var value = (string)DataBinder.Eval(c.DataItem, "Title"); 
    string result;
    switch (value) {
         case "in the mirror":
            result = "AnotherTitlePage.aspx";
            break;
        case "When your Eyes":
            result = "AnotherTitlePage2.aspx";
            break;
        case "Her Delivery":
            result = "ATitlePage1.aspx";
            break;
        case "You Never Know What You Might See":
            result = "TitlePage3.aspx";
            break;              
        default:
            result = "TitlePageDoesNotHavesameNameAsDBEntry.aspx";
            break;
    }
    return Page.ResolveUrl(result);
}

虽然这可行,但它需要将所有标题连同对应的 url 硬编码到相应的 select 语句中,这相当于 240 个案例!此外,唯一标识每一行的字段是“id”值,它是一个整数 - 我在尝试为 int 设置 case select 并返回正确的 url 时遇到问题(问题是转换错误)。

我希望完成的工作:找到最有效的方法来打开单击网格视图的“标题”字段的相应 url,而无需将网格列中的字段名称和 url 硬编码到案例选择中。

那么,鉴于上述信息,案例选择是否是满足此要求的最佳方法?任何更好的方法的例子或建议将不胜感激!

4

1 回答 1

0

您必须使用 c# 4.0 及更高版本中引入的路由概念,而不是制作 180 个实际的 .aspx 页面。

在这里您可以动态生成 N 个页面,并且只有一个页面将用作模板。

请参阅以下链接了解更多详情

asp.net 中的 URL 路由示例 www.jobdoor.in

于 2013-05-21T11:42:28.927 回答