HTMLAnchor忘记了它的HRef值

时间:2019-01-20 11:21:29

标签: c# htmlcontrols

我已经为Web应用程序基于JSON配置文件创建了一个动态菜单。这是为了允许我的客户端在必要时启用和禁用用户模块。菜单是在用户登录时使用HTMLControl对象构建的,并存储在会话“捆绑包”中,以便通过Page_Load方法注入到每个页面中。

我这样创建菜单:

public HtmlGenericControl buildMenu(string config, string rootpath)
{
    //Get the list of installed modules from the config file
    List<activeModule> Modules = new List<activeModule>();

    //Add the mandatory modules
    addStandardModules(Modules);

    //Parse the rest of the modules from the config and add them to the list of modules
    JObject ModuleList = JObject.Parse(config);
    IList<JToken> modules = ModuleList["modules"].Children().ToList();
    foreach (JToken module in modules)
    {
        activeModule aModule = module.ToObject<activeModule>();
        Modules.Add(aModule);
    }

    HtmlGenericControl MenuContainer = new HtmlGenericControl("div");
    MenuContainer.Attributes["id"] = "menucontainer";

    //Use the list of modules to build a menu
    foreach (activeModule module in Modules.Where(module => module.Enabled == true))
    {
        HtmlGenericControl menuItemContainer = new HtmlGenericControl("div");
        menuItemContainer.Attributes["class"] = "menuitem";

        HtmlGenericControl menuTextContainer = new HtmlGenericControl("div");
        menuTextContainer.Attributes["class"] = "menuitemtext";
        menuItemContainer.Controls.Add(menuTextContainer);

        HtmlAnchor hyperlink = new HtmlAnchor();                
        hyperlink.InnerText = module.Name;
        hyperlink.Attributes.Add("href", rootpath + module.Location);
        menuTextContainer.Controls.Add(hyperlink);

        HtmlGenericControl menuImageContainer = new HtmlGenericControl("div");
        menuImageContainer.Attributes["class"] = "menuimg";
        menuItemContainer.Controls.Add(menuImageContainer);

        HtmlImage image = new HtmlImage();
        image.Src = rootpath + module.Iconpath;
        menuImageContainer.Controls.Add(image);


        MenuContainer.Controls.Add(menuItemContainer);

    }

    return MenuContainer;

}

调用菜单时,它是通过会话捆绑包中名为MenuContainer的变量来完成的,就像这样:

protected void Page_Load(object sender, EventArgs e)
{
     menucontainer.Controls.Add(variables.MenuContainer);
}

第一次加载带有菜单的页面时,菜单会正确显示,每个锚点都指向正确的位置,并且加载了每个图标。但是,第二次加载后,每个<a>元素都会丢失其href值。此外,每个<img>标签都会丢失其src值。

您可能会注意到,我已经显示了使用Attributes.Add(string, string)的示例。我首先尝试使用HRef = <string>,然后尝试Attributes["href"] = <string>。整个行为都是一样的。

可能是什么原因造成的?此外,这是一个值得解决的问题,还是应该用Javascript重写?

0 个答案:

没有答案