2012-07-02 49 views
1

我的MVC 4应用程序出现问题。我有代码模型如下:在MVC模型中处理空值

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并返回数据(这是表的名字在我的数据库)。

问题指向此行:obj.Type = model.Type.Trim();每当来自数据库的空值发生时。

有人能请我指出一个有效的方法来处理这个问题吗?

回答

2

你可以尝试检查数据库返回之前要复制到视图模型对象。

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

嗨!这几乎处理我需要的东西。现在我还有一个问题,如果可空字段的数据类型是'DateTime',那么怎么办?我该如何处理?非常感谢你! – Smiley

+0

您必须将数据库实体更改为DateTime?数据类型。因此,您可以使用类似的语句,或者只需检查Nullable的'HasValue'属性以将值复制到ViewModel对象。 –

0

使用

public string? Type { get; set; } 
+0

嗨。感谢您的回应!我已经尝试使用'公共字符串?类型{get; };但是我得到另一个错误消息:'字符串类型'必须是不可为空的值类型,以便将其用作通用类型或方法'System.Nullable '中的参数'T'。任何想法,这是从哪里来的?谢谢! – Smiley

+0

啊,我误解了你的问题。 System.String是一个引用类型,并且可以为空。 可为空和?后缀是Int32,Double,DateTime和其他值类型。 –