當前位置:成語大全網 - 書法字典 - ViewBag和ViewData如何跨控制器傳遞值?

ViewBag和ViewData如何跨控制器傳遞值?

最近,在開發項目中,使用了ASP.NET MVC。因為之前沒有接觸過,所以對它的價值傳遞方式有些陌生。在此,我們做壹個初步的總結,積累學習!

壹:使用

ViewData使用:

[csharp]查看普通副本打印?

公共操作結果索引()

{

列表& lt字符串& gtcolors =新列表& lt字符串& gt();

顏色。Add("紅色");

顏色。添加(“綠色”);

顏色。添加(“藍色”);

view data[" list colors "]= colors;

ViewData["dateNow"]=日期時間。現在;

ViewData["name"] = "何靜媛";

view data[" age "]= 25;

return View();

}

視角

[html]查看純文本打印?

& ltp & gt

我的名字是& ltb & gt@ view data[" name "]& lt;/b & gt;,& ltb & gt@ view data[" age "]& lt;/b & gt;歲。

& ltbr/>;

我喜歡以下顏色:

& lt/p & gt;

& ltul id = " colors " & gt

@ foreach(var color in view data[" List colors "]as List & lt;字符串& gt)

{

& lt李& gt& ltfont color = " @ color " & gt@ color & lt/font & gt;& lt/李& gt

}

& lt/ul & gt;

& ltp & gt

@ViewData["dateNow"]

& lt/p & gt;

ViewBag用途:

[csharp]查看普通副本打印?

公共操作結果索引()

{

列表& lt字符串& gtcolors =新列表& lt字符串& gt();

顏色。Add("紅色");

顏色。添加(“綠色”);

顏色。添加(“藍色”);

ViewBag。ListColors = colors//顏色是列表

ViewBag。DateNow=日期時間。現在;

ViewBag。Name= "和景苑";

ViewBag。年齡= 25;

return View();

}

視角

[html]查看純文本打印?

& ltp & gt

我的名字是& ltb & gt@ViewBag。名稱& lt/b & gt;,& ltb & gt@ViewBag。年齡& lt/b & gt;歲。

& ltbr/>;

我喜歡以下顏色:

& lt/p & gt;

& ltul id = " colors " & gt

@foreach(在ViewBag中改變顏色。列表顏色)

{

& lt李& gt& ltfont color = " @ color " & gt@ color & lt/font & gt;& lt/李& gt

}

& lt/ul & gt;

& ltp & gt

@ViewBag。DateNow

& lt/p & gt;

在使用中,我們可以很明顯的看到這兩種方式的區別,只是在獲取價值的方式上有些不同!

第二,定義

視圖包定義

[csharp]查看普通副本打印?

公共動態視圖包{

獲取{

if (_dynamicViewData == null) {

_ dynamicViewData = new DynamicViewDataDictionary(()= & gt;view data);

}

return _ dynamicViewData

}

}

視圖數據定義

[csharp]查看普通副本打印?

公共視圖數據字典視圖數據{

獲取{

if (_viewData == null) {

SetViewData(new view data dictionary());

}

return _ viewData

}

設置{

SetViewData(值);

}

}

從定義上我們可以看到,ViewBag是ViewData的動態包裝器,相當於在ViewData的基礎上進行包裝。

三:對比

ViewData和ViewBag的區別

1,ViewData是字典類型,賦值方法是dictionary。相應的值ViewData["myName"],通過鍵值讀取。

2.ViewBag是壹個動態類型。使用時可以直接給ViewBag.myName添加屬性賦值。

3.ViewBag和ViewData只在當前動作中有效,相當於View。

4.ViewData和ViewBag中的值可以相互訪問,因為ViewBag的實現包含ViewData。

註意:

1,ViewBag只有在要訪問的關鍵字是有效的C#標識符時才起作用。

例如,如果在ViewData[“帶空格的鍵”]中存儲壹個值,則不能使用ViewBag來訪問它。因為根本編不出來。

2.動態值不能作為參數傳遞給擴展方法。因為為了選擇正確的擴展方法,C#編譯器在編譯時必須知道每個參數的真實類型。如果任何壹個參數是動態的,它將不能通過編譯。

比如這行代碼會編譯失敗:@ html.textbox ("name ",viewbag.name)。有兩種方法可以讓這行代碼編譯:第壹種是使用ViewData["Name"],第二種是轉換ViewBag的值。名稱轉換為具體類型:(string)ViewBag.Name。

四:總結

對於大家來說,價值傳遞模式這個話題應該有點老套,因為只要接觸過項目的人都很了解,這是壹個很基礎的知識。這裏列出來的主要目的不是告訴妳如何傳遞價值,如何操作,然後要求妳寫下來,而是通過上面的知識告訴妳,知識並沒有我們想象的那麽深刻。即使我們沒有聽說過所有的知識,只要我們花壹些時間去學習它。