如何在C#文本字符串中包含@Html.Actionlink?

如何在C#文本字符串中包含@Html.Actionlink?,c#,asp.net-mvc-4,html-helper,C#,Asp.net Mvc 4,Html Helper,虽然@Html.Actionlink()帮助程序非常方便在.cshtml文件中构建元素,但是否可以在C#字符串中构造它们,以便随后在Html输出中正确呈现它们 例如,如果我为字符串变量指定一个类似以下的值: Book.ReadMore = "Click @Html.ActionLink(\"this link\", \"About\", \"Home\") to read more."; 然后我尝试通过我的.cshtml页面显示它(文本加链接),代码类似于: <p>@Model.R

虽然@Html.Actionlink()帮助程序非常方便在.cshtml文件中构建
元素,但是否可以在C#字符串中构造它们,以便随后在Html输出中正确呈现它们

例如,如果我为字符串变量指定一个类似以下的值:

Book.ReadMore = "Click @Html.ActionLink(\"this link\", \"About\", \"Home\") to read more.";
然后我尝试通过我的.cshtml页面显示它(文本加链接),代码类似于:

<p>@Model.ReadMore</p>
现在,对于正确的SoC,我知道在C#code中包含HTML内容不是最好的做法,但是在这种情况下,是否有可能获得正确的
链接,而不是字符串本身

EDIT:More information-此字符串只是大约20-30个字符串集合中的一项(在视图中使用
for循环
显示)。这些项目中只有一小部分需要链接(每种情况下都不同)。因为,如上所述,我同意在模型代码中使用Razor/HTML显然不是一个好的实践,所以我正在尝试一种简单的方法(如果可能的话),它可以让我在正确的地方灵活地构建链接,同时仍然可以提供MVC SoC的可维护性


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

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

您的模型不应包含HTML,这是一个视图问题,属于视图代码。也许你应该使用剃刀助手

在应用程序代码文件夹(如果没有,请创建一个)中,添加一个文件ReadMoreHelpers.cshtml:

@helper ReadMore() {
    <text>Click @Html.ActionLink("this link", "About", "Home") to read more.</text>
}
这将输出你想要的。如果您坚持将该财产置于您的视野中,您可以:

Book.ReadMore = "Click " + @Html.ActionLink("this link", "About", "Home").ToHtmlString() + " to read more.";
然后在您的视图中,确保使用
Raw

@Html.Raw(Book.ReadMore) 

但是,我强烈建议您不要在模型属性中添加HTML。

上述投票率最高(未被接受)答案的可能重复似乎符合您的要求。我当然100%同意模型中不包含HTML。在我对原始帖子的编辑中,我列出了更详细的场景,我正在寻找如何避免它。我想知道是否有可能(并遵循最佳实践)通过以下步骤实现干净的分离:(a)在模型中,声明各种令牌的枚举,然后(b)在模型中,根据需要将这些令牌包括在字符串项中,最后(c)构建Razor助手,将枚举的令牌转换为那些ActionLink。
Book.ReadMore = "Click " + @Html.ActionLink("this link", "About", "Home").ToHtmlString() + " to read more.";
@Html.Raw(Book.ReadMore)