英文:
MvcHtmlString in ASP.NET Core 6 MVC
问题
我已将它更新为新应用程序中的以下内容:
public static HtmlString BuildColoredIconTag(string iconName, string color)
{
var icon = BuildInternalColoredIconTag(iconName, color);
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(icon);
var finalHtml = icon.ToHtmlString();
return new HtmlString(finalHtml);
}
这是正确的修改,应该可以正常工作。在新应用程序中,MvcHtmlString
已经不再使用,而是使用 HtmlString
。然后,您可以在.cshtml
文件中继续使用@IconExtensions.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info")
。这个修改将解决您收到的空引用警告问题。
英文:
I am migrating an application from ASP.NET MVC 5 running on .NET 4.8 to ASP.NET Core 6 MVC.
The MVC 5 application has the following:
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);
}
I updated it to the following in the new application:
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);
}
Is this correct or should I update it to something else? I cannot test it yet because I am adding other components.
I have the following in a partial .cshtml file, but I receive null reference warnings:
@IconExtensions.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info")
What should I update it to?
答案1
得分: 1
这是由你的csproj文件中的以下一行引起的:
<Nullable>enable</Nullable>
如文档中所述:
> 默认情况下,禁用了可空注解和警告上下文。
> 这意味着你的现有代码编译时不需要更改,也不会生成新的警告。
> 从.NET 6开始,新项目在所有项目模板中包括<Nullable>enable</Nullable>元素。
如果你不喜欢它,只需禁用它:
<Nullable>disable</Nullable>
如果你想保留它而不生成警告,可以将iconName声明为string?
,或尝试使用??
运算符,如下所示:
ViewData["icon"]?.ToString()??"DefaultIcon"
英文:
It was caused by this line in your csproj file
<Nullable>enable</Nullable>
as mentioned in the document:
> By default, nullable annotation and warning contexts are disabled.
> That means that your existing code compiles without changes and
> without generating any new warnings. Beginning with .NET 6, new
> projects include the <Nullable>enable</Nullable> element in all
> project templates.
If you don't like it ,just disable it
<Nullable>disable</Nullable>
If you want to keep it without warning ,declearing iconName as string?
or trying with ??
operater
like:
ViewData["icon"]?.ToString()??"DefaultIcon"
答案2
得分: 0
如果您不想在VS中删除新的可为空内容,您可以像下面这样纯粹作为一个示例来做,我还会将其转换为一个扩展方法:
public static IHtmlString BuildColoredIconTag(this IHtmlHelper helper, string? iconName, string? color)
{
if (string.IsNullOrEmpty(iconName)) return HtmlString.Empty; // 或者抛出异常
if (string.IsNullOrEmpty(color)) return HtmlString.Empty; // 或者抛出异常
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")
英文:
If you dont want to remove the new nullable stuff in VS, you could do something like this purely as an example, also I would convert it to an extension:
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);
}
Then call like:
@Html.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info")
And to simplify things even further you could change the method's signature to:
public static IHtmlString BuildColoredIconTag(this IHtmlHelper helper, object? iconName, string? color)
{
if(iconName == null) { return HtmlString.Empty; }
...
And then call with @Html.BuildColoredIconTag(ViewData["icon"], "text-info")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论