如何让 WebGrid 仅在 item.Email 字段中有数据时才显示电子邮件 Link?
How Do I Get WebGrid To Display Email Link Only If There's Data In The item.Email Field?
我有一个 WebGrid,我试图通过仅在 SQL 查询的 ContactEmail 字段中有一些内容时才显示 mailto link 来美化它。如果 ContactEmail 字段中没有任何内容(即 NULL 或“”),我希望它什么都不显示。
当前版本有一个标准:
locationsGrid.Column("ContactEmail", "Email")
但这只是将该字段中的任何内容显示为文本。不太美观。
如果我去:
locationsGrid.Column("ContactEmail", "Email", format: @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>)
我在每一行中都得到了文本 "Email",那些在电子邮件字段中有文本的文本得到了 link(如我所愿),而那些没有以纯文本形式得到的文本(我肯定不想)。
我试过:
locationsGrid.Column("ContactEmail", "Email", format: (item.ContactEmail == null || item.ContactEmail == "" ? "" : @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>))
但我得到:
Compiler Error Message: CS0103: The name 'item' does not exist in the current context
有人可以帮我改正吗?
您是否尝试过在格式部分的 lambda 函数中明确使用 item
:
format: (item) => (String.IsNullOrEmpty(item.ContactEmail) ? "" : @<text><a href="mailto:@item.ContactEmail" target="_top">Email</a></text>)
或者,如果您更喜欢更详细的方法:
grid.Column(format: (item) =>
{
if (!String.IsNullOrEmpty(item.ContactEmail))
{
return Html.Raw("<a href='mailto:@item.ContactEmail' target='_top'>Email</a>"));
}
})
我认为您可能需要在 lambda 中设置 "item"。
locationsGrid.Column("ContactEmail", "Email", format: item => (item.ContactEmail == null || item.ContactEmail == "" ? "" : @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>))
还可以使用 String.IsNullOrEmpty(item.ContactEmail)
而不是检查 null 然后使用空字符串可以帮助您的代码更简洁。
我已经找到了问题的解决方案,但采用了横向方法来解决问题。基本上,我没有在 WebGrid.Column 的 属性 格式中使用条件语句和 lamdba 函数,而是从源 SQL 查询中创建了 HTML。所以,虽然我最初的 SELECT 查询的相关片段说:
SELECT ContactEmail FROM Clients
它现在说:
SELECT CASE WHEN LEN(ContactEmail) < 1 THEN '' WHEN ContactEmail is null THEN '' ELSE ('<a href=mailto:' + ContactEmail + ' target=_top>email</a>') END AS EmailAddress FROM Clients
这正是我想要的输出到 WebGrid 的内容,除非我只是使用:
locationsGrid.Column("EmailAddress", "Email")
我的 SQL 标签输出中的大于号和小于号被转置为 entity_name 变体,我认为这是针对 SQL 注入的内置预防措施.
处理这个很简单 - 我只是用 Html.Raw 格式化输出,所以我的 WebGrid 现在显示:
locationsGrid.Column("EmailAddress", "Email", format: @<text> @Html.Raw(item.EmailAddress)</text> )
我有一个 WebGrid,我试图通过仅在 SQL 查询的 ContactEmail 字段中有一些内容时才显示 mailto link 来美化它。如果 ContactEmail 字段中没有任何内容(即 NULL 或“”),我希望它什么都不显示。
当前版本有一个标准:
locationsGrid.Column("ContactEmail", "Email")
但这只是将该字段中的任何内容显示为文本。不太美观。
如果我去:
locationsGrid.Column("ContactEmail", "Email", format: @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>)
我在每一行中都得到了文本 "Email",那些在电子邮件字段中有文本的文本得到了 link(如我所愿),而那些没有以纯文本形式得到的文本(我肯定不想)。
我试过:
locationsGrid.Column("ContactEmail", "Email", format: (item.ContactEmail == null || item.ContactEmail == "" ? "" : @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>))
但我得到:
Compiler Error Message: CS0103: The name 'item' does not exist in the current context
有人可以帮我改正吗?
您是否尝试过在格式部分的 lambda 函数中明确使用 item
:
format: (item) => (String.IsNullOrEmpty(item.ContactEmail) ? "" : @<text><a href="mailto:@item.ContactEmail" target="_top">Email</a></text>)
或者,如果您更喜欢更详细的方法:
grid.Column(format: (item) =>
{
if (!String.IsNullOrEmpty(item.ContactEmail))
{
return Html.Raw("<a href='mailto:@item.ContactEmail' target='_top'>Email</a>"));
}
})
我认为您可能需要在 lambda 中设置 "item"。
locationsGrid.Column("ContactEmail", "Email", format: item => (item.ContactEmail == null || item.ContactEmail == "" ? "" : @<text><a href="mailto:@item.ContactEmail " target="_top">Email</a></text>))
还可以使用 String.IsNullOrEmpty(item.ContactEmail)
而不是检查 null 然后使用空字符串可以帮助您的代码更简洁。
我已经找到了问题的解决方案,但采用了横向方法来解决问题。基本上,我没有在 WebGrid.Column 的 属性 格式中使用条件语句和 lamdba 函数,而是从源 SQL 查询中创建了 HTML。所以,虽然我最初的 SELECT 查询的相关片段说:
SELECT ContactEmail FROM Clients
它现在说:
SELECT CASE WHEN LEN(ContactEmail) < 1 THEN '' WHEN ContactEmail is null THEN '' ELSE ('<a href=mailto:' + ContactEmail + ' target=_top>email</a>') END AS EmailAddress FROM Clients
这正是我想要的输出到 WebGrid 的内容,除非我只是使用:
locationsGrid.Column("EmailAddress", "Email")
我的 SQL 标签输出中的大于号和小于号被转置为 entity_name 变体,我认为这是针对 SQL 注入的内置预防措施.
处理这个很简单 - 我只是用 Html.Raw 格式化输出,所以我的 WebGrid 现在显示:
locationsGrid.Column("EmailAddress", "Email", format: @<text> @Html.Raw(item.EmailAddress)</text> )