Action參數和View、Json、重定向

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內核源生的類;這兩個類之間沒有繼承的關係;

相關文章
相關標籤/搜索