我正在从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")