在强类型MVC视图用户控件中使用值类型

kri*_*ian 4 c# asp.net-mvc

我有一个MVC用户控件,具有以下基本结构:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Decimal>" %>

<%= Math.Round(Model) %>
Run Code Online (Sandbox Code Playgroud)

我使用它时会出现此错误消息:

编译器错误消息:CS0452:类型'decimal'必须是引用类型才能在泛型类型或方法'System.Web.Mvc.ViewUserControl'中将其用作参数'TModel'

有没有办法让这个工作(以某种方式欺骗框架将Decimal作为参考类型处理?)或者我正在尝试做的只是根本错误?

Jon*_*son 8

我建议你在ViewModel中包装值类型.这将在未来允许一些灵活性(可能需要也可能不需要).

public class MyUserControlViewModel
{
    public Decimal MyValue { get; private set; }

    public MyUserControlViewModel(Decimal dec)
    {
        MyValue = dec;
    }
}


<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyUserControlViewModel>" %>

<%= Math.Round(Model.MyValue) %>
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你想要一个快速的方法,不必包装成课,使用它

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Nullable<Decimal>>" %>
Run Code Online (Sandbox Code Playgroud)

你也可以考虑使用

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
Run Code Online (Sandbox Code Playgroud)

并通过代码验证