MVC中Controller與View之間資料互傳

2022-05-04 20:00:13 字數 4349 閱讀 1920

**:

一、controller向view傳遞資料

1、使用viewdata傳遞資料

在controller中定義如下:

viewdata[「message_viewdata」] = 「 hello viewdata!」;
在view中讀取controller中定義的viewdata資料,**如下:

@html.encode(viewdata["message_viewdata"])
js中讀取viewdata中資料如下:

2、使用viewbag傳遞資料在controller中定義如下:

viewbag.message_viewbag =  「 hello viewbag !」;
在view中讀取controller中定義的viewbag資料,**如下:

@html.encode(viewbag.message_viewbag)
js中讀取viewbag中資料如下:

3、使用tempdata傳遞資料在controller中定義如下:

tempdata[「message」] = 「hello word!」;
然後在view中讀取controller中定義的tempdata資料,**如下:

@html.encode(tempdata["message_tempdata"])
js中讀取tempdata中資料如下:

4、使用model、傳遞資料首先要建立model實體類:

1

public

class

hellomodel 2

7set

8}

9private

string

_text;

10public

string

text

11

13set

14}

15 }

使用model傳遞資料的時候,通常在建立view的時候我們會選擇建立強型別view如下圖所示:

模型類下拉列表框中選中剛才建立的hellomodel

建立強型別的view以後,view的第一行**如下所示:

@model test.models.hellomodel
就代表了這個view使用的model為「test.models.hellomodel」

然後在view中讀取model中定義的資料,**如下:

@html.encode(model.name)
js中讀取model中資料如下:

總結:1)viewdata與tempdata方式是弱型別的方式傳遞資料,而使用model傳遞資料是強型別的方式。

2)viewdata與tempdata是完全不同的資料型別,viewdata資料型別是viewdatadictionary類的例項化物件,而tempdata的資料型別是tempdatadictionary類的例項化物件。

3)tempdata實際上儲存在session中,控制器每次執行請求時都會從session中獲取tempdata資料並刪除該session。tempdata資料只能在控制器中傳遞一次,其中的每個元素也只能被訪問一次,訪問之後會被自動刪除。

4)viewdata只能在乙個action方法中進行設定,在相關的檢視頁面讀取,只對當前檢視有效。理論上,tempdata應該可以在乙個action中設定,多個頁面讀取。但是,實際上tempdata中的元素被訪問一次以後就會被刪除。

5)在mvc3開始,檢視資料可以通過viewbag屬性訪問,在mvc2中則是使用viewdata。mvc3中保留了viewdata的使用,有關他們之間的區別可以參考這個文章。

mvc3中 viewbag、viewdata和tempdata的使用和區別(

二、view向controller傳遞資料

在asp.net mvc中,將view中的資料傳遞到控制器中,主要通過傳送表單的方式來實現。具體的方式有:

1、通過request.form讀取表單資料

我們在view層做如下定義:

1

@using (html.beginform("hellomodeltest", "home", formmethod.post))

2

注意:hellomodeltest為對應的action名,home為對應的controller名稱。

然後在controller層,通過request.form讀取表單資料的**如下所示:

32、通過formcollection讀取表單資料

我們在view層做如下定義:

1

@using (html.beginform("hellomodeltest", "home", formmethod.post))

2

然後在controller層,通過formcollection讀取表單資料的**如下所示:

33、模型繫結我們在view層做如下定義:

1

@using (html.beginform("hellomodeltest", "home", formmethod.post))

2

預設的模型繫結:相較於從請求中獲取表單值,下面的edit action則是簡單地以乙個模型對像為引數(album):

當你的action方法是以乙個模型物件充當引數時,mvc執行時將會用模型繫結來構建該引數。預設用於模型繫結的是 defaultmodelbinder,以上述的hellomodel為例,defaultmodelbinder將會檢索出所有可用的hellomodel屬性用於繫結模型。根據命名約定,defaultmodelbinder能夠自動地在請求中獲取相應的值來填充hellomodel物件(它還能建立乙個物件的例項來填充)

換句話說,假設hellomodel有乙個name屬性,那麼模型繫結就會在請求中查詢名為name的引數。注意我說的是在「請求中」,而不是「表單集合」中。模型繫結會在請求中的各個方面進行值查詢,這裡面包括路由資料,查詢字串,表單集合。有必要的話你還可以新增自定義的值提供資訊。

模型繫結不並侷限於http post及複雜引數(如hellomodel),你完全可以傳入乙個原始的簡單引數:

public actionresult hellomodeltest( string name,string

text)

//….

在該場景中,模型繫結將會在請求中查詢名為name,text 的引數。

顯示模型繫結:

當action有引數的時候,會隱式地執行模型繫結。你還可以在控制器裡面使用updatemodel和 tryupdatemodel來顯式呼叫模型繫結。呼叫updatemodel的時候,如果模型物件是無效的或者繫結期間發生錯誤則會丟擲異常。tryupdatemodel則不會丟擲異常,它返回乙個布林值:如果繫結成功並且模型驗證通過則返回true,否則返回false。

} 模型狀態是模型繫結產生的副產物。每次繫結器繫結值到模型時,都會在模型狀態中進行記錄。你可以在模型繫結之後檢視模型狀態來判斷繫結是否成功:

}如果在模型繫結過程中發生異常,模型狀態裡面就會包含導致異常的那個屬性名,繫結值以及錯誤資訊。

MVC中controller部分的寫法

controller也就是控制器 控制器複雜提供訪問應用程式的行為,通常通過介面定義或註解定義兩種方法實現。控制器負責解析使用者的請求並將其轉換為乙個模型。在spring mvc中乙個控制器類可以包含多個方法 在spring mvc中,對於controller的配置方式有很多種 在這複習兩種cont...

MVC學習二 Controller和View關係

控制器 controller 主要是定義方法和載入檢視 view 1.控制器中的action方法返回值的型別actionresult,string 2.控制器中action方法接收瀏覽器引數方式 2.1.通過 url路由中配置的同名引數 url stu del 1 public actionresu...

SpringMVC中controller的跳轉

方式一 使用modelandview return new modelandview redirect tolist 這樣可以重定向到tolist這個方法 方式二 返回string return redirect tolist 方式一 自己手動拼接url new modelandview redir...