虽然@ Html.Actionlink()帮助器非常便于在.cshtml文件中构建<a>
元素,但是可以在C#字符串中构造它们,以便随后在HTML输出中正确呈现它们?
例如,如果我为字符串变量分配类似于以下的值:
Book.ReadMore = "Click @Html.ActionLink(\"this link\", \"About\", \"Home\") to read more.";
然后我尝试通过我的.cshtml页面显示它(文字文本和链接),使用类似的代码:
<p>@Model.ReadMore</p>
我在浏览器中获得的完整字符串就像我输入的那样,包括@Html ......等等:
Click @Html.ActionLink("this link", "About", "Home") to read more.
现在,对于正确的SoC,我知道在C#代码中包含HTML内容并不是最好的做法,但是在这种情况下是否可以获得正确的<a>
链接,而不是字符串本身?
编辑:更多信息 - 此字符串只是大约20-30个字符串集合中的一个项目(在视图中使用for loop
显示)。只有少数这些项目需要链接(在每种情况下都不同)。因为,如上所述,我同意在模型代码中使用Razor / HTML显然不是一个好习惯,我试图得到一个简单的方法(如果可能的话),这将使我能够灵活地在右边某处构建链接放置,同时仍然保持MVC SoC的可维护性。
必须采用“正确”的方式,这很简单但可维护。
答案 0 :(得分:1)
您的模型不应包含HTML,这是一个视图问题,属于视图代码。可能你应该使用Razor助手。
在App_Code文件夹中(如果没有,请创建一个),添加一个文件ReadMoreHelpers.cshtml:
@helper ReadMore() {
<text>Click @Html.ActionLink("this link", "About", "Home") to read more.</text>
}
然后在任何视图中:
@ReadMoreHelpers.ReadMore()
这将输出你想要的东西。如果坚持将该属性放在您的视图中,您可以执行以下操作:
Book.ReadMore = "Click " + @Html.ActionLink("this link", "About", "Home").ToHtmlString() + " to read more.";
然后在您看来,请确保使用Raw
:
@Html.Raw(Book.ReadMore)
但是,我不能更强烈地建议您不要在模型属性中放置HTML。
答案 1 :(得分:0)
我不这么认为。 Razor视图引擎将在运行时解释ActionLink代码,而将其作为C#字符串的一部分填充将在编译期间进行解释。