0

虽然 @Html.Actionlink() 帮助器非常方便<a>在 .cshtml 文件中构建元素,但是否可以在 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,我知道将 HTML 内容包含在 C# 代码中并不是最佳实践,但是<a>在这种情况下是否有可能获得正确的链接,而不是字符串本身?

编辑:更多信息- 此字符串只是大约 20-30 个字符串集合中的一项(for loop在视图中使用 a 显示)。这些项目中只有一小部分需要链接(每种情况都不同)。因为,如上所述,我同意在模型代码中使用 Razor/HTML 显然不是一个好习惯,所以我正在尝试一种简单的方法(如果可能的话),这将使我能够灵活地在右侧某处构建链接地方,同时仍然产生 MVC SoC 的可维护性。

必须有一种“正确”的方式来做到这一点,它既简单又可维护。

4

2 回答 2

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 放在模型属性中。

于 2013-11-01T02:11:27.800 回答
0

我不这么认为。Razor 视图引擎将在运行时解释 ActionLink 代码,而将其填充为 C# 字符串的一部分将在编译时解释。

于 2013-11-01T02:06:26.603 回答