【问题标题】:Handle Null Values in MVC Model在 MVC 模型中处理空值
【发布时间】:2012-07-02 13:51:54
【问题描述】:

我的 MVC 4 应用程序有问题。我有一个模型,代码如下:

public class MyModel
{
    [Required]
    [Display(Name = "Code")]
    public string Code { get; set; }

    [Display(Name = "Type")]
    [DisplayFormat(NullDisplayText = "")] 
    public string Type { get; set; }
}

模型中的Code 字段表示数据库中的不可为空的类型,而Type 字段接受空值。现在,当我尝试使用控制器将模型中的项目加载到我的视图中时,我的问题就来了。请看以下控制器代码:

public ActionResult Display(string Code)
{
    MyManager manage= new MyManager();

    Model model= new Model();
    model = manage.GetItem(Code);

    MyModel obj = new MyModel();
    obj.Code = model.Code.Trim();
    obj.Type = model.Type.Trim();

    return View(obj);
 }

基本上,GetItems 方法来自我的经理,它接受 Code 并返回 Model 类型的数据(这是我数据库中表的名称)。

问题出在这一行:obj.Type = model.Type.Trim(); 每当出现来自数据库的空值时。

有人可以指点我如何处理这个问题的有效方法吗?

【问题讨论】:

    标签: asp.net-mvc model


    【解决方案1】:

    您可以尝试在复制到 ViewModel 对象之前检查数据库返回。

    obj.Type = provider.Type != null ? provider.Type.Trim() : string.Empty;
    

    【讨论】:

    • 嗨!这个几乎可以处理我需要的东西。现在我还有一个问题,如果可以为空的字段的数据类型是DateTime呢?我该如何处理?非常感谢!
    • 您必须将数据库实体更改为 DateTime?数据类型。因此,您可以使用类似的语句或在将值复制到 ViewModel 对象之前检查 Nullable 的 HasValue 属性。
    【解决方案2】:

    使用

    public string? Type { get; set; }
    

    【讨论】:

    • 嗨。感谢您的回复!我已经尝试使用public string? Type {get; set;},但我收到另一条错误消息:The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'。知道这是从哪里来的吗?谢谢!
    • 啊,我看错了你的问题。 System.String 是一个引用类型并且已经可以为空。 Nullable 和 ?后缀适用于 Int32、Double、DateTime 和其他值类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2020-09-24
    相关资源
    最近更新 更多