gpt4 book ai didi

c# - mvc razor View 中的整数扩展

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:37 25 4
gpt4 key购买 nike

我对 ASP.NET MVC 和扩展方法是全新的。

我已经创建了两个我想在我的 View 中使用的扩展:

public static class Extensions
{
public static string ToYesNo(this bool value)
{
return value ? "Yes" : "No";
}

public static string MonthToString(this int value)
{
return (value >= 1 && value <= 12) ? CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(value) : "";
}
}

我可以在 View 中使用带有 bool 值的 ToYesNo,但我无法使用整数查看 MonthToString。我得到:

'int' does not contain a definition for 'MonthToString'

扩展位于名为 BitvaerkAdmin.Models 的命名空间中,我在 th cshtml 文件中引用了它。

为什么我不能使用我的整数扩展?

编辑:

我在我的 View 中这样引用扩展:

@using BitvaerkAdmin.Models


<h3>
@ViewBag.Month.MonthToString()
</h3>



@foreach (Order order in ViewBag.Orders)
{
<td>
@order.Valid.ToYesNo()
</td>
}

最佳答案

好的,既然您已经展示了您的代码,那么它为什么不起作用就很清楚了。您使用 ViewBag(ASP.NET MVC 中的万恶之源和人们遇到的所有问题的根源 - 此答案的作者几乎没有添加)。

一旦你借用了它的路径,坠入深渊就很明显了。为了让它发挥作用,你需要执行的转换将加速这个秋天:

@((int)(ViewBag.Month).MonthToString())

只需尝试运行以下控制台应用程序,您就会明白动态变量不能用于分派(dispatch)扩展方法:

public static class Extensions
{
public static string MonthToString(this int value)
{
return (value >= 1 && value <= 12) ? CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(value) : "";
}
}

class Program
{
static void Main()
{
dynamic foo = 123;
Console.WriteLine(foo.MonthToString()); // crash at runtime
}
}

看到人们使用 ViewBag 时,为什么我总是批评它?因为它会把你引向各种奇怪的事情。你失去了 Intellisense,你不能在动态变量上分派(dispatch)扩展方法,...

所以实际上你不需要转换。您根本不应该使用任何 ViewBag/ViewData。您应该使用强类型 View 模型:

@using BitvaerkAdmin.Models
@model MyViewModel

<h3>
@Model.Month.MonthToString()
</h3>

@foreach (Order order in Model.Orders)
{
<td>
@order.Valid.ToYesNo()
</td>
}

为了避免 foreach 循环,您可以使用显示模板:

@using BitvaerkAdmin.Models
@model MyViewModel

<h3>
@Model.Month.MonthToString()
</h3>

@Html.DisplayFor(x => x.Orders)

然后为订单定义一个显示模板,该模板将由框架为集合的所有元素自动呈现(~/Views/Shared/DisplayTemplates/Order.cshtml):

@using BitvaerkAdmin.Models
@model Order
<td>
@Model.Valid.ToYesNo()
</td>

现在一切都是强类型和工作的。

关于c# - mvc razor View 中的整数扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8955770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com