asp.net mvc學習(Vs技巧與Httpcontext)


模型綁定分析

博客模擬的表單已經可以包含網站開發過程中遇到的大部分的表單格式了,包含一些數組、對象等等。

1、直接拼接字符串

$.ajax({
    url: "/XXX",
    type: "post",
    data: "name=Emrys&age=26&bobbys[0]=足球&star[0].movie=琅琊榜",
    success: function (r) {
        console.log(r);
    }
});

2、javascript對象

var data1 = { name: "Emrys" };
data1.age = 26;
data1["bobbys[0]"] = "足球";
data1["star[0].movie"] = "琅琊榜"; 

$.ajax({
    url: "/",
    type: "post",
    data: data1,
    success: function (r) {
        console.log("xxxxxxxxxxxxxx");
        console.log(r);
    }
});

你可以選擇不同的情況選擇不同的拼接方式,當然你也可以把后台方法搞成對象每個字段

 

利用Vs data 生成 model

選擇你的data

 

$.ajax({
    url: "/",
    type: "post",
    data: {
        "name": "Emrys",
        "age": "26",
        "bobbys": ["足球", "電影"],
        "company": {
            "name": "上海xxxxxx公司",
            "address": "上海徐匯區xxxx路",
            "tel": [
                "021-88888881",
                "021-88888882",
                "021-88888883",
                "021-88888884"
            ]
        }
    },
    success: function (r) {
        console.log(r);
    }
});

 

復制data 選擇性粘貼 將Json黏貼為類

 

我們在asp.net mvc中的開發中肯定會封裝httpcontext,我們可以在其中獲得很多東西,也可以在httpcontext中寫入需要返回客戶端的信息,但像一些有野心的人,是遠遠不夠的。

WebWorkContext.cs:
public class WebWorkContext
    {

        /// <summary>
        /// 判斷用戶是否登錄
        /// </summary>
        public bool IsLogin { get; set; }

        /// <summary>
        /// 用戶ID
        /// </summary>
        public int UserId { get; set; }

        /// <summary>
        /// 用戶名稱
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 用戶郵箱
        /// </summary>
        public string UserEmail { get; set; }

        /// <summary>
        /// 是否是Get請求
        /// </summary>
        public bool IsGet { get; set; }
        /// <summary>
        /// 是否是Ajax請求
        /// </summary>
        public bool IsAjax { get; set; }
    }

BaseController.cs中繼續於Controller

public class BaseController : Controller
    {
        /// <summary>
        /// 創建上下文Context
        /// </summary>
        protected WebWorkContext WorkContext = new WebWorkContext();

        /// <summary>
        /// 重寫Controller中的Initialize方法。在此方法中獲取用戶和其他的信息
        /// </summary>
        /// <param name="requestContext"></param>
        protected override void Initialize(RequestContext requestContext)
        {
            base.Initialize(requestContext);

            // 判斷用戶信息
            if (!string.IsNullOrEmpty(Convert.ToString(Session["USERID"])))
            {
                WorkContext.IsLogin = true;
                WorkContext.UserId = Convert.ToInt32(Session["USERID"]);
                WorkContext.UserName = Convert.ToString(Session["USERNAME"]);
                WorkContext.UserEmail = Convert.ToString(Session["USEREMAIL"]);
            }

            // 判斷是否是Get請求
            WorkContext.IsGet = requestContext.HttpContext.Request.HttpMethod == "GET";

            // 判斷是否是Ajax請求
            WorkContext.IsAjax = requestContext.HttpContext.Request.IsAjaxRequest();

        }

    }

控制器中使用BaseController

public class HomeController : BaseController
    {
        public ActionResult Index()
        {
            var userId = WorkContext.UserId; 
            var userName = WorkContext.UserName; 
            return View();
        }
    }
}

在View(cshtml)中BaseController

我們之所以可以在view中使用html/Model/ajax 都是因為我們繼承了WebViewPage。

那我們如何讓View能夠干我們想干的事情呢,我們可以自定義一個類去重寫WebViewPage

public abstract class WebWorkContextWebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel>
    {
        public WebWorkContext WorkContext; 
        public sealed override void InitHelpers()
        {
            base.InitHelpers();
            BaseController baseController = ((this.ViewContext.Controller) as BaseController);
            if (baseController != null)
            {
                WorkContext = baseController.WorkContext; 
            }

        }
    }

我們再去更改view的繼承

 <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="WebWorkContextDemo.WebWorkContextWebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="BossWeb" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

 我們看一看如何去使用

***需要注意的是:這里需要注意的是,我們觀察代碼就知道,View中的WebWorkContext其實是獲取BaseController中的,所以使用WebWorkContext的View所對應的Controller必須繼承BaseController

@{
    ViewBag.Title = "Home Page";
}

用戶的郵箱是: @WorkContext.UserEmail<br />
用戶名是: @WorkContext.UserName<br />

@{ 
    var id = WorkContext.UserId;
}

 

 友情鏈接http://www.cnblogs.com/emrys5/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM