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/

posted @ 2018-10-10 11:18  ZaraNet  阅读(1309)  评论(0编辑  收藏  举报