2012-06-18 33 views
4

如果我使用包含強類型對象的ViewBag,MVC Razor是否有任何方式來定義(或強制轉換)以便所有元素出現在IntelliSense中?強類型的Viewbag物品

例如可以說我有

ViewBag.Movies.Name 
ViewBag.Movies.Length 

我知道電影是對象類型的電影,裏面有成員名稱和長度

class Movie { 
    public string Name {get; set;} 
    public string Length {get; set;} 
} 

我可以採用某種投這個,就像我對做的模型

@model Transactions.UserTransactionDetails 

這樣Movie的成員就可以在Razor中使用了嗎?

+1

ViewBag只是​​沒有強類型,所以你應該使用強類型模型。 –

回答

11

使用視圖模型,它包含了所有你需要查看

例如不同對象的屬性

public class MovieTransactionViewModel 
{ 
    public List<Transaction> Transactions { get; set; } 
    public List<Movie> Movies { get; set; } 
} 

然後,讓您的視圖使用它作爲模型,並且您將在您的視圖中獲得智能感知。

這樣你就不會改變你的模型,所以EntityFramework不會受到影響。

12

您可以將其存儲在一個變量中。

var movie = (Movie)ViewBag.Movie; 

然後鍵入@movie.將生產智能感知NameLength

1

不是。這是因爲ViewBag沒有強類型。它使用動態和ExpandoObject實現。如果你需要一個強類型模型,爲什麼你不使用它?

+0

我已經在使用模型來傳遞用戶表單的交易信息,所以沒有想到我可以有2個模型:( –

+1

難道你不能只是將你需要的數據添加到模型中嗎?查看模型? – alexn

+0

使用ViewModel是一個好主意(一般情況下),但是如果您需要使用多個模型中的實體,則它是「必需的」 –