HTMLAnchor забывает, что это значение HRef - PullRequest
0 голосов
/ 20 января 2019

Я создал динамическое меню на основе файла конфигурации 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?

...