【发布时间】:2013-03-01 14:57:59
【问题描述】:
我有一些数据,有时这些数据是空白的。我宁愿使用一个辅助方法来渲染数据(如果存在),并在字符串为空/null时渲染一些仅显示“N/A”的HTML,而不是在我的视图上制作一堆疯狂的逻辑。
理想语法:@Helpers.RenderThisOrThat(Model.CustomerPhone)
如果Model.CustomerPhone(一个字符串)为空,它将呈现这个替代的HTML:<span class='muted'>N/A</span>
这是我们目前所拥有的:
@helper RenderThisOrThat(string stringToRender, string methodToGetAlternateText = null)
{
@RenderThisOrThat(MvcHtmlString.Create(stringToRender), methodToGetAlternateText)
}
@helper RenderThisOrThat(MvcHtmlString stringToRender, string methodToGetAlternateText = null)
{
if (string.IsNullOrWhiteSpace(stringToRender.ToHtmlString()))
{
if (!string.IsNullOrWhiteSpace(methodToGetAlternateText)) {
@methodToGetAlternateText
}
<span class='muted'>N/A</span>
}
@stringToRender
}
这工作得很好,直到我们想要将字符串以外的东西传递给任一参数。例如,当我们有一个电子邮件地址时,我们希望它是该电子邮件的链接,而不仅仅是电子邮件的字符串。
@Helpers.RenderThisOrThat(@<a href="mailto:@Html.DisplayFor(m => m.CustomerEmail)">@Html.DisplayFor(m => m.CustomerEmail)</a>)
它给了我们错误:“无法将 lambda 表达式转换为类型'字符串',因为它不是委托类型”
我们不知道如何进行这项工作......这里有什么帮助吗?
【问题讨论】:
-
你能写出这样的代码吗?除了您的辅助方法之外,我认为 Razor 无法解释这一点
-
您引用的是
System.Linq;吗? -
@Kami LINQ 是做什么用的?
-
创建一个接受 lambda
@Helper TextEditorBlock(<Expression<Func<Product, string>> expression)的方法覆盖
标签: asp.net-mvc razor