我有一个剃刀视图,我目前正在使用看起来像这样的代码:
@if(Model.IsLink)
{
<a href="...">
}
Some text that needs to appear
@if(Model.IsLink)
{
</a>
}
这样可行,但代码感觉不干净。是否有更好/更可接受的方式来实现这种模式?
答案 0 :(得分:2)
这是一个我认为更清洁的简单方法。
将文本设置为视图顶部的变量:
@{
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)
答案 1 :(得分:1)
您可以创建自定义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;
}
}
}
答案 2 :(得分:1)
在HTML 5中,valid如果您没有链接,则可以使用此标记
<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属性。