MvcHtmlString in ASP.NET Core 6 MVC



我正在从ASP迁移应用程序。.NET MVC 5运行在。NET 4.8上。. 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")

我应该把它更新成什么?

这是由您的csproj文件中的这一行引起的

<Nullable>enable</Nullable>

如文件中所述:

默认情况下,禁用可空注释和警告上下文。这意味着您的现有代码无需更改即可编译而不产生任何新的警告。从。net 6开始,新的项目在all中包含enable元素项目模板。

如果你不喜欢它,就禁用它

<Nullable>disable</Nullable>

如果你想保持它没有警告,声明iconName为string?或尝试??操作符

:

ViewData["icon"]?.ToString()??"DefaultIcon"

如果你不想在VS中删除新的可空的东西,你可以做这样的事情纯粹作为一个例子,我也会把它转换成一个扩展:

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")

最新更新