ASP.NET MVC 控制器與視圖
一、控制器相關(guān)
在Controller類中方法訪問級別為public的方法,就是行為(Action).如果不希望Controller類中的方法成為Action(可以在地址欄中被訪問),有兩種實(shí)現(xiàn)方式:將方法的訪問級別設(shè)置為private在方法上添加特性標(biāo)記[NonAction]
諸如新增\修改等功能模塊,我們往往會(huì)創(chuàng)建2個(gè)名稱相同的Action:一個(gè)action用于加載新增\修改頁面;另一個(gè)action用于處理新增\修改頁面提交的表單數(shù)據(jù).那么如何區(qū)分在何時(shí)調(diào)用哪個(gè)action呢?
我們將加載新增|修改頁面時(shí)被調(diào)用的action,添加[HttpGet]特性標(biāo)記;將處理頁面提交的表單數(shù)據(jù)時(shí)調(diào)用的action,添加[HttpPost]特性標(biāo)記.
下面的示例代碼演示了如何實(shí)現(xiàn)學(xué)生的新增(action相關(guān)的代碼).
如何在Action中獲取表單提交的數(shù)據(jù)?
表單中提交的數(shù)據(jù),可以通過Action的參數(shù)進(jìn)行映射.
映射的前提條件:Html標(biāo)記的name屬性值和action中參數(shù)的名稱要一致.
下面的示例代碼演示了映射的過程(注意粉色框標(biāo)記的部分):
Action中如何映射復(fù)雜對象?
對于上面的映射代碼,我們還可以有另外一種等價(jià)的寫法,就是將映射的屬性定義到一個(gè)實(shí)體類中,這樣我們就可以在action中添加該實(shí)體類型的參數(shù),參考代碼如下所示:
如何從一個(gè)Action中跳轉(zhuǎn)至另外一個(gè)Action?
新增或修改功能完成后,需要跳轉(zhuǎn)至數(shù)據(jù)列表頁面,我們可以通過如下代碼實(shí)現(xiàn):
代碼 => return RedirectToAction(“ActionName”, “ControllerName”).
二、視圖相關(guān)
在ASPX視圖引擎中,可以使用asp服務(wù)器控件,但它的作用僅僅局限與生成html代碼,而不推薦開發(fā)人員使用asp控件的事件.因此建議開發(fā)人員手工編寫Html標(biāo)記。
但是手寫Html標(biāo)記比較耗費(fèi)時(shí)間,有沒有更好的解決方案?答案就是使用Html輔助方法。
Html輔助方法
Html輔助方法的作用就是通過調(diào)用C#方法的方式,快速的生成相應(yīng)的html標(biāo)記.
Html輔助方法分為2大類:弱類型html輔助方法和強(qiáng)類型html輔助方法.
其中以For關(guān)鍵字結(jié)尾的都是強(qiáng)類型的輔助方法.下面的示例代碼演示了二者的調(diào)用方式,以及生成的html源碼。
注意:Html輔助方法有很多種重載形式,在開發(fā)過程中可以根據(jù)實(shí)際需要自行選擇.比如要實(shí)現(xiàn)一個(gè)包含class\style\onchange屬性和事件的單行文本框,可以參考如下代碼:
強(qiáng)調(diào):如何使用HTML輔助方法生成form標(biāo)記?
生成form標(biāo)記的兩個(gè)Html輔助方法為:Html.BeginForm()和Html.EndForm(),但他們在使用時(shí)和其他的Html輔助方法有所不同,下面的示例代碼演示了它們的兩種用法:
如何在URL地址中傳遞參數(shù)?
場景一:將學(xué)生ID值映射到名稱為id參數(shù)上
場景二:將學(xué)生ID值映射到名稱為stuId參數(shù)上
場景三:url地址中包括stuId和name兩個(gè)參數(shù)
這三種場景的使用代碼如下所示:
其他在實(shí)際開發(fā)過程中,一個(gè)小的功能模塊就對應(yīng)一個(gè)控制器.比如學(xué)生信息管理就是一個(gè)控制器,新增學(xué)生\修改學(xué)生\查詢學(xué)生列表\刪除學(xué)生都可以對應(yīng)控制器中的Action.常用Html輔助方法匯總
弱類型 |
強(qiáng)類型 |
|
單行文本框 |
Html.TextBox() |
Html.TextBoxFor() |
多行文本框 |
Html.TextArea() |
Html.TextAreaFor() |
密碼框 |
Html.Password() |
Html.PasswordFor() |
復(fù)選框 |
Html.Checkbox() |
Html.CheckBoxFor() |
單選按鈕 |
Html.RadioButton() |
Html.RadioButtonFor() |
下拉列表框 |
Html.DropdownList() |
Html.DropdownListFor() |
平鋪列表框 |
Html.ListBox() |
Html.ListBoxFor() |
Label |
Html.Label() |
Html.LabelFor() |
Form表單 |
Html.BeginForm() Html.EndForm() |
|
超鏈接 |
Html.ActionLink() |
如何在視圖中使用下拉列表
第一步:在action中構(gòu)造好下拉列表中需要的數(shù)據(jù),數(shù)據(jù)的類型為IEnumerable<SelectListItem>。
第二步:將構(gòu)造好的數(shù)據(jù)放到Controller中的ViewData(ViewBag|TempData)屬性中。
第三步:在視圖view中使用Html.DropDownList輔助方法來生成下拉列表,而綁定的數(shù)據(jù)可以使用視圖View中的ViewData來獲?。〒Q句話講就是,Controller中放置到ViewData的數(shù)據(jù),可以在視圖View中的ViewData屬性中提?。?/p>
在視圖中使用Html.DropDownList綁定Ienumerable<SelectListItem>
- ASP.NET?Core?MVC創(chuàng)建控制器與依賴注入講解
- ASP.NET Core MVC解決控制器同名Action請求不明確的問題
- 詳解如何在ASP.NET Core中編寫高效的控制器
- Asp.Net Core控制器如何接收原始請求正文內(nèi)容詳解
- Asp.net Core MVC中怎么把二級域名綁定到特定的控制器上
- ASP.NET MVC從視圖傳參到控制器的幾種形式
- 詳解Asp.Net MVC——控制器與動(dòng)作(Controller And Action)
- ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式詳解
- Asp.net MVC中獲取控制器的名稱的方法
- ASP.NET中MVC從后臺控制器傳遞數(shù)據(jù)到前臺視圖的方式
- ASP.NET?MVC從控制器中獲取URL值
相關(guān)文章
asp.net程序編譯調(diào)試時(shí)偶爾出現(xiàn)訪問被拒絕的錯(cuò)誤的解決方法
asp.net程序編譯調(diào)試時(shí)偶爾出現(xiàn)訪問被拒絕的錯(cuò)誤的解決方法...2007-04-04.NET?6新特性試用之TryGetNonEnumeratedCount?方法
這篇文章主要介紹了.NET?6新特性試用TryGetNonEnumeratedCount,這個(gè)方法可計(jì)算可枚舉類型的元素總數(shù),下面來看看具體的使用方式吧,需要的朋友可以參考一下2022-03-03asp.net如何在圖片上加水印文字具體實(shí)現(xiàn)
這篇文章主要介紹了asp.net如何在圖片上加水印文字具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-12-12Entity?Framework根據(jù)實(shí)體的EntityState狀態(tài)實(shí)現(xiàn)增刪改查
這篇文章介紹了Entity?Framework根據(jù)實(shí)體的EntityState狀態(tài)實(shí)現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03一步步打造簡單的MVC電商網(wǎng)站BooksStore(4)
這篇文章主要和大家一起一步步打造一個(gè)簡單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第四篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04ASP.NET MVC下基于異常處理的完整解決方案總結(jié)
ASP.NET MVC是一個(gè)極具可擴(kuò)展開發(fā)框架,在這篇文章中我將通過它的擴(kuò)展實(shí)現(xiàn)與EntLib的集成,并提供一個(gè)完整的解決異常處理解決方案。2017-01-01