1、Actionjavascript
一、Action參數: 普通參數、Model類、FormCollectionhtml
(1)、普通參數 Index(string name,int age) 框架會自動把用戶請求的QueryString 或者Post表單中的值根據參數名字映射對應參數的值,適用於查詢參數比較少的狀況。java
public ActionResult F3(string name, int age) { return Content("姓名:" + name + "年齡:" + age); }
(2)、Model類: 這種類叫ViewModeljquery
public ActionResult Index(IndexModel model) { return View(model); }
(3)、 FormCollection ,採用fc["name"]這種方式訪問,適用於表單元素不肯定的狀況,用的比較少。ajax
public ActionResult F2Show() { return View(); } public ActionResult F2(FormCollection fc) { string name = fc["name"]; string age = fc["age"]; return Content("姓名:" + name + "年齡:" + age); }
<html> <head> <meta name="viewport" content="width=device-width" /> <title>F2Show</title> </head> <body> <form action="~/Test/F2" method="post"> <input type="text" name="name" /> <input type="text" name="age" /> <input type="submit" /> </form> </body> </html>
(4) 一部分是普通參數,一部分Model:json
public ActionResult Index(IndexModel model,string department) { return Content(model.Num1+model.Num2+department); }
(5) 添加默認值,默認值參數在最後跨域
public ActionResult F3(string name, int age=12) { return Content("姓名:" + name + "年齡:" + age); }
二、 Action 方法不能重載,除了加上[HttpGet] 、[HttpPost] 標記瀏覽器
[HttpGet] public ActionResult F4() { return View(); } [HttpPost] public ActionResult F4(string name,int age) { return Content("姓名:" + name + "年齡:" + age); }
<body> <form action="~/Test/F4" method="post"> <input type="text" name="name" /> <input type="text" name="age" /> <input type="submit" /> </form> </body>
2、View服務器
1. app
public ActionResult F2Show() { // return View(); return View("F2"); //找F2.cshtml顯示 }
二、 顯示View的時候傳遞Model
public ActionResult F2Show() { IndexModel model = new IndexModel(); model.Num1 = 122; return View("F2",model); //第二個參數是Model }
public ActionResult F2Show() { string name = "wang"; return View("F2",(object)name); //第二個參數是Model } //cshtml頁 @model string
2、ActionResult
一、 View() 是一個方法,返回值是ViewResult 類型,ViewResult繼承自ActionResult
3、Json
JsonResult Json(object data) 把data對象序列化成json字符串返回給客戶端,而且設置 contentType爲「application/json」.
json 方法是默認禁止Get請求的(主要是爲了防止CSRF攻擊,ajax請求沒法跨域),若是須要調用Get請求: return Json(p1,JsonRequestBehavior.AllowGet)
public ActionResult JsonTest1() { var p1 = new { Name = "chen", Age = 12 }; return Json(p1); //默認Post請求 } public ActionResult J1() { return View(); }
<script src="~/Scripts/jquery-1.10.2.js"></script> <script type="text/javascript"> $(function () { $("#btn1").click(function () { $.ajax({ url: "/Test/JsonTest1", type: "post", datatype: "json", success: function (obj) { alert(obj.Name) }, error: function () { alert("error") } }) } ) } ) </script>
<button id="btn1">點我</button>
json缺點:
一、 日期類型轉化成的字符串是「/Date(1532585581810)/」這樣格式的,在客戶端要用js代碼格式化處理麻煩;
二、 json字符串中屬性的名字和C#中的大小寫同樣,不符合js中「小寫開頭,駝峯命名」的習慣;
4、重定向
一、 Redirect(url);
二、RedirectToAction(string actionName,string controllerName ):其實最終仍是拼接成Url,調用Redirect()
三、 相對路徑:
"." -- 表明目前所在的目錄,相對路徑。 ".." -- 表明上一層目錄,相對路徑。 "../../" -- 表明的是上一層目錄的上一層目錄,相對路徑。
./ 表示在當前路徑下,
../表示在當前路徑的上一級路徑下.
~/表示當前網站的根目錄下.
四、Redirect 和return View的區別:
(1) Redirect 是讓瀏覽器重定向到新的地址,retun view是讓服務器把指定的cshtml的內容運行渲染後給到瀏覽器;
(2) Redirect 瀏覽器和服務器之間發生了兩次交互,return view瀏覽器和服務器之間發生了1次交互;
(3) Redirect是兩次請求,因此第一次設置的ViewBag等這些信息,在第二次是取不到的,而View則是在同一個請求中,因此ViewBag信息取不到;
(4) 若是用Redirect ,則因爲是新的對Controller/Action 的請求,因此對應的Action會被執行到,若是是view,則直接拿某個view去顯示,對應的Action是不執行的
(5) 什麼狀況用view?服務器端產生數據,想讓一個view去顯示,對應的Action是不執行的;
什麼狀況用Redirect? 讓瀏覽器去訪問另一個頁面的時候;
5、其餘:
一、 TempData:
通常用於驗證碼,一次取了以後,在取就沒有了
public ActionResult T1() { TempData["code"] = "1234"; return View(); } public ActionResult TempData1() { string code = (string)TempData["code"]; return Content("code=" + code); }
二、 進行MVC開發的時候,儘可能使用****base類,不要用asp.net內核源生的類;這兩個類之間沒有繼承的關係;