我有一个剃刀视图,我目前正在使用看起来像这样的代码:
@if(Model.IsLink)
{
<a href="...">
}
Some text that needs to appear
@if(Model.IsLink)
{
</a>
}
这可行,但代码感觉不干净。有没有更好/更被接受的方式来完成这种模式?
我有一个剃刀视图,我目前正在使用看起来像这样的代码:
@if(Model.IsLink)
{
<a href="...">
}
Some text that needs to appear
@if(Model.IsLink)
{
</a>
}
这可行,但代码感觉不干净。有没有更好/更被接受的方式来完成这种模式?
您可以创建一个自定义 HtmlHelper 方法。在此处查看有关如何执行此操作的参考:http ://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs
您的方法可以将“IsLink”布尔值作为参数,并使用它来输出锚点或纯文本。这是一个可能看起来像的示例:
namespace MvcApplication1.Helpers
{
public static class LabelExtensions
{
public static string LinkableText(this HtmlHelper helper, bool isLink, string text, string url = null)
{
return isLink ? string.Format("<a href='{0}'>{1}</a>", url, text) : text;
}
}
}
这是一个我认为更清洁的简单方法。
将文本设置为视图顶部的变量:
@{
var someText = "Some text that must appear";
}
然后有条件地输出:
@if (Model.IsLink)
{
<a href='#'>@someText </a>
}
else
{
@someText
}
上面的多行if
语句避免了使用 HTML 进行字符串构造,但如果你想将语法压缩到一行,你可以这样做。
@Html.Raw(Model.IsLink?String.Format("<a href='#'>{0}</a>",someText):someText)
在 HTML 5 中,如果您没有链接,则使用这样的标记是有效的
<a>some text</a>
如果你这样做,像这样标记
<a href="http://example.com">some text</a>
从 razor v2 开始,您的 null 条件属性负责处理 href,因此您的代码可以是这样的。
<a href="@link">some text</a>
如果@link
为 null,则将省略 href 属性。