2012-07-02 81 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和其他值類型。 –