asp.net-mvc如何创建动态 HTML 标记与Razor actionlink 在 c# 中可视数据字符串

发布时间: 2017/3/25 17:17:28
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我创建了一个动态菜单根据用户角色在 MVC C# 中,和不呈现的 (虽然我可以加载 HTML 标记) 菜单中的操作链接。我想象这是由于 @ 符号开头︰

if(userGroup.Equals("Administrators")){
   menuItems+=@"<span class=""menuItem"">
                      @Html.ActionLink(""Add User"", ""RegisterNewUser"", ""Home"", null, new{@Class=""menuItemActionLink""})
                      </span>";
}
(...)
ViewData["menuItems"]=menuItems;

与视图检索︰

@Html.Raw(@ViewData["menuItems"])

我试图变化的 html 编码都不得要领。我能想到的最好的解决方案是使用在标志转义代码,但我不知道它是什么 (我试过 ' \' 以及串联的形式"@"+ @"Html.ActionLink)。有什么想法?

解决方法 1:

虽然我不知道为什么到底是 actionlink 不是是正确地呈现 (也许大写 C 班?),从控制器到视图发送 html 的做法不是一个好主意。这王小东的角色控制器和视图,并使它更难对任何期待着这些实体之间的区别。

更好的选择可能会有一个代码块在视图中,如︰

@if (ViewData["admin"] != null){  ...code to render your admin menu ... }

在您的控制器︰

if(userGroup.Equals("Administrators")){ ViewData["admin"] = true; }

根据您的需要,这些片段可能会改变。您可以测试为 true 或 false (而不是空的),或添加一个字符串;可视数据是由很多你创造。但这至少保持 HTML 呈现在视图之间的区别和过程控制的控制器。

官方微信
官方QQ群
31647020