c# - 如何使用名称更改 URL id,但我想传递 ID,它显示名称与 URL 中的 id 对应
问题描述
我转发器项目绑定在此我传递 ID 中创建一个超链接 URL,但是当用户单击它时,它是该页面上的传递 ID,但在 URL 中显示它的名称。像这样的例子:
localhost:50636/Products/Categories/Categories.aspx/?mc=1&cs=3&mid=1
现在客户希望看起来像这样:
本地主机:50636/产品/类别/xyzname/abcfv/ufo
我正在尝试,但它不成功任何人都可以请帮助
protected void Rep_BindMenuItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
tblMenuCategory dataItem = (tblMenuCategory)e.Item.DataItem;
HyperLink Menu = (HyperLink)e.Item.FindControl("HyperLinkMenu");
Menu.Text = dataItem.MenuCategory;
int MenuId = dataItem.MenuCategoryID;
Repeater repeatercategory = (Repeater)e.Item.FindControl("RepBindMenuCategItem");
repeatercategory.DataSource = BLCategory.CategoryLoadByMenuId(MenuId);
repeatercategory.DataBind();
//Menu.NavigateUrl = string.Concat("~/Products/Categories/Categories.aspx/?mc=", MenuId.ToString() + "&cs=" + 0 + "&mid=" + MenuId.ToString());
Response.RedirectToRoute("Selected Menu", new { Menuname = Menu.Text, mc = MenuId.ToString(), cs = 0, mid = MenuId.ToString() });
}
}
在Global.asax
我传递值喜欢这个
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
之后我通过了
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("Selected Menu", "{Menuname}/{mc}/{cs}/{mid}", "~/Products/Categories/Categories.aspx");
}
解决方案
在这里,我猜您的数据库或任何其他资源中已经存在菜单,并且您的菜单具有以下字段,例如在课堂上
public class MyMenu
{
public int MenuId { get; set; }
public string MenuText { get; set; }
public string MC { get; set; }
public string CS { get; set; }
public string MID { get; set; }
}
然后您必须创建一种方法,该方法将为您提供具有来自数据库或任何其他资源的 Id 的特定菜单,例如
public MyMenu GetMenuById(int MenuId)
{
//Database or repository call to get your menu data with menuId
}
您将使用上述方法,如下所示
protected void Rep_BindMenuItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
tblMenuCategory dataItem = (tblMenuCategory)e.Item.DataItem;
**HyperLink Menu * * = (HyperLink)e.Item.FindControl("HyperLinkMenu");
Menu.Text = dataItem.MenuCategory;
int MenuId = dataItem.MenuCategoryID;
//Get menu by calling below method with menuid
MyMenu myMenu = GetMenuById(MenuId);
Repeater repeatercategory = (Repeater)e.Item.FindControl("RepBindMenuCategItem");
repeatercategory.DataSource = BLCategory.CategoryLoadByMenuId(MenuId);
repeatercategory.DataBind();
//Bind those menu data to below parameters values
Response.RedirectToRoute("Selected Menu", new { Menuname = myMenu.MenuText, mc = myMenu.MC, cs = myMenu.CS, mid = myMenu.MID });
}
}
试一次可能对你有帮助。
推荐阅读
- javascript - 无法获取字符串数组
- php - 关于 PHP 中的 elvis 运算符的困惑
- c# - 创建 ac# 统计服务的线程安全版本
- aem - AEM Workflow 自定义输入数据
- node.js - 如何在 Node.js 中记录可点击的文件目录
- python - 导入 face_recognition ImportError:在 mod_wsgi 中没有名为 face_recognition 的模块
- java - 用 Spring 返回一个空的 ResponseEntity 的最佳方法是什么?
- java - Android XzingScanner:如何自定义 ZxingScanner 布局?(添加按钮)
- qt - 如何忽略 Qt 中的 PressAndHold 事件?
- r - 在 data.table 构造函数中使用字符串作为列名