**:
一、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使用model傳遞資料的時候,通常在建立view的時候我們會選擇建立強型別view如下圖所示:public
class
hellomodel 2
7set
8}
9private
string
_text;
10public
string
text
11
13set
14}
15 }
模型類下拉列表框中選中剛才建立的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注意:hellomodeltest為對應的action名,home為對應的controller名稱。@using (html.beginform("hellomodeltest", "home", formmethod.post))
2
然後在controller層,通過request.form讀取表單資料的**如下所示:
32、通過formcollection讀取表單資料
我們在view層做如下定義:
1然後在controller層,通過formcollection讀取表單資料的**如下所示:@using (html.beginform("hellomodeltest", "home", formmethod.post))
2
33、模型繫結我們在view層做如下定義:
1預設的模型繫結:相較於從請求中獲取表單值,下面的edit action則是簡單地以乙個模型對像為引數(album):@using (html.beginform("hellomodeltest", "home", formmethod.post))
2
當你的action方法是以乙個模型物件充當引數時,mvc執行時將會用模型繫結來構建該引數。預設用於模型繫結的是 defaultmodelbinder,以上述的hellomodel為例,defaultmodelbinder將會檢索出所有可用的hellomodel屬性用於繫結模型。根據命名約定,defaultmodelbinder能夠自動地在請求中獲取相應的值來填充hellomodel物件(它還能建立乙個物件的例項來填充)
換句話說,假設hellomodel有乙個name屬性,那麼模型繫結就會在請求中查詢名為name的引數。注意我說的是在「請求中」,而不是「表單集合」中。模型繫結會在請求中的各個方面進行值查詢,這裡面包括路由資料,查詢字串,表單集合。有必要的話你還可以新增自定義的值提供資訊。
模型繫結不並侷限於http post及複雜引數(如hellomodel),你完全可以傳入乙個原始的簡單引數:
public actionresult hellomodeltest( string name,string在該場景中,模型繫結將會在請求中查詢名為name,text 的引數。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...