提问人:csharpdev 提问时间:4/7/2023 更新时间:4/7/2023 访问量:327
ASP.NET Core 6 MVC 中的 MvcHtmlString
MvcHtmlString in ASP.NET Core 6 MVC
问:
我正在将应用程序从在 .NET 4.8 上运行的 ASP.NET MVC 5 迁移到 ASP.NET Core 6 MVC。
MVC 5 应用程序具有以下功能:
public static MvcHtmlString BuildColoredIconTag(string iconName, string color)
{
var icon = BuildInternalColoredIconTag(iconName, color);
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(icon);
var finalHtml = icon.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(finalHtml);
}
我在新应用程序中将其更新为以下内容:
public static HtmlString BuildColoredIconTag(string iconName, string color)
{
var icon = BuildInternalColoredIconTag(iconName, color);
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(icon);
var finalHtml = icon.TagRenderMode.ToString();
return new HtmlString(finalHtml);
}
这是正确的还是我应该将其更新为其他内容?我还不能测试它,因为我正在添加其他组件。
我在部分 .cshtml 文件中包含以下内容,但我收到空引用警告:
@IconExtensions.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info")
我应该把它更新到什么?
答:
0赞
mxmissile
4/7/2023
#1
如果你不想删除 VS 中新的可为 null 的东西,你可以做这样的事情纯粹作为一个例子,我也会将其转换为扩展:
public static IHtmlString BuildColoredIconTag(this IHtmlHelper helper, string? iconName, string? color)
{
if(string.IsNullOrEmpty(iconName)) return HtmlString.Empty; // or throw
if(string.IsNullOrEmpty(color)) return HtmlString.Empty; // or throw
var icon = BuildInternalColoredIconTag(iconName, color);
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(icon);
var finalHtml = icon.TagRenderMode.ToString();
return new HtmlString(finalHtml);
}
然后调用类似:
@Html.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info")
为了进一步简化操作,您可以将方法的签名更改为:
public static IHtmlString BuildColoredIconTag(this IHtmlHelper helper, object? iconName, string? color)
{
if(iconName == null) { return HtmlString.Empty; }
...
然后打电话@Html.BuildColoredIconTag(ViewData["icon"], "text-info")
1赞
Ruikai Feng
4/7/2023
#2
这是由 csproj 文件中的这一行引起的
<Nullable>enable</Nullable>
如文档中所述:
默认情况下,可为 null 的注释和警告上下文处于禁用状态。 这意味着您现有的代码无需更改即可编译,并且 而不生成任何新警告。从 .NET 6 开始,新增 项目包括 enable 元素 项目模板。
如果你不喜欢它,就禁用它
<Nullable>disable</Nullable>
如果您想在没有警告的情况下保留它,请清除iconName或尝试使用操作器string?
??
喜欢:
ViewData["icon"]?.ToString()??"DefaultIcon"
评论