首页 > 解决方案 > 如何使用名称更改 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");
}

标签: c#asp.net

解决方案


在这里,我猜您的数据库或任何其他资源中已经存在菜单,并且您的菜单具有以下字段,例如在课堂上

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 });
    }
}

试一次可能对你有帮助。


推荐阅读