从控制器构建菜单项

时间:2019-02-12 10:29:08

标签: c# asp.net-core asp.net-core-mvc

我正在从控制器创建HTML菜单。菜单存储在数据库中,我制作html标签,如下所示:

foreach (UIMenuModel item in list)
{
    if (item.Controller != "Home")
    {
        string line = string.Format(@"<li><a asp-area=""{0}"" asp-controller=""{1}"" id=""{1}""
            asp-action = ""{2}"" style = ""font-size:16px;;"" > {3} </a></li>", item.Area, item.Controller, item.Action, item.LinkText);
        sb.Append(line);
    }
}

这使我在HTML之下:

<li><a asp-area="" asp-controller="CrossApproval" id="CrossApproval" asp-action="Index" style="font-size:16px;;"> Cross Approval </a></li>

用HTML本身编写的其他菜单项在浏览器中显示以下HTML。

<li><a id="CrossRequest" style="font-size:16px" href="/CrossRequest">Cross Request</a></li>

在用户界面上,它看起来很完美。但是,我无法单击并导航到所需的控制器和操作方法。在此定位标记不允许我导航的同时,有人可以帮我识别一下。

2 个答案:

答案 0 :(得分:0)

使用RazorLightEngine将纯字符串转换为呈现的Razor字符串:

string content = "Hello @Model.Name. Welcome to @Model.Title repository";

var model = new
{
  Name = "John Doe",
  Title = "RazorLight"
};

var engine = new RazorLightEngine();
string result = engine.ParseString(content, model);

然后将其添加到剃刀视图中的任何位置,例如编码字符串

<div>
     @Html.Raw(result)
</div>

答案 1 :(得分:0)

正如Question中所发布的那样,带有href的HTML正常工作。因此,我决定模仿控制器的相同行为,并如下更改代码:

string line = string.Format(@"<li><a asp-area=""{0}"" id=""{1}"" href=""/{1}/{2}""
                           style=""font-size:16px"">{3}</a></li>", item.Area, item.Controller, item.Action, item.LinkText);

这生成了一个链接,我可以单击并浏览。