模型绑定分析

博客模拟的表单已经可以包含网站开发过程中遇到的大部分的表单格式了,包含一些数组、对象等等。

1、直接拼接字符串

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

2、javascript对象

  1. var data1 = { name: "Emrys" };
  2. data1.age = ;
  3. data1["bobbys[0]"] = "足球";
  4. data1["star[0].movie"] = "琅琊榜";
  5.  
  6. $.ajax({
  7. url: "/",
  8. type: "post",
  9. data: data1,
  10. success: function (r) {
  11. console.log("xxxxxxxxxxxxxx");
  12. console.log(r);
  13. }
  14. });

你可以选择不同的情况选择不同的拼接方式,当然你也可以把后台方法搞成对象每个字段

利用Vs data 生成 model

选择你的data

  1. $.ajax({
  2. url: "/",
  3. type: "post",
  4. data: {
  5. "name": "Emrys",
  6. "age": "",
  7. "bobbys": ["足球", "电影"],
  8. "company": {
  9. "name": "上海xxxxxx公司",
  10. "address": "上海徐汇区xxxx路",
  11. "tel": [
  12. "021-88888881",
  13. "021-88888882",
  14. "021-88888883",
  15. "021-88888884"
  16. ]
  17. }
  18. },
  19. success: function (r) {
  20. console.log(r);
  21. }
  22. });

复制data 选择性粘贴 将Json黏贴为类

我们在asp.net mvc中的开发中肯定会封装httpcontext,我们可以在其中获得很多东西,也可以在httpcontext中写入需要返回客户端的信息,但像一些有野心的人,是远远不够的。

  1. WebWorkContext.cs
  1. public class WebWorkContext
  2. {
  3.  
  4. /// <summary>
  5. /// 判断用户是否登录
  6. /// </summary>
  7. public bool IsLogin { get; set; }
  8.  
  9. /// <summary>
  10. /// 用户ID
  11. /// </summary>
  12. public int UserId { get; set; }
  13.  
  14. /// <summary>
  15. /// 用户名称
  16. /// </summary>
  17. public string UserName { get; set; }
  18.  
  19. /// <summary>
  20. /// 用户邮箱
  21. /// </summary>
  22. public string UserEmail { get; set; }
  23.  
  24. /// <summary>
  25. /// 是否是Get请求
  26. /// </summary>
  27. public bool IsGet { get; set; }
  28. /// <summary>
  29. /// 是否是Ajax请求
  30. /// </summary>
  31. public bool IsAjax { get; set; }
  32. }

BaseController.cs中继续于Controller

  1. public class BaseController : Controller
  2. {
  3. /// <summary>
  4. /// 创建上下文Context
  5. /// </summary>
  6. protected WebWorkContext WorkContext = new WebWorkContext();
  7.  
  8. /// <summary>
  9. /// 重写Controller中的Initialize方法。在此方法中获取用户和其他的信息
  10. /// </summary>
  11. /// <param name="requestContext"></param>
  12. protected override void Initialize(RequestContext requestContext)
  13. {
  14. base.Initialize(requestContext);
  15.  
  16. // 判断用户信息
  17. if (!string.IsNullOrEmpty(Convert.ToString(Session["USERID"])))
  18. {
  19. WorkContext.IsLogin = true;
  20. WorkContext.UserId = Convert.ToInt32(Session["USERID"]);
  21. WorkContext.UserName = Convert.ToString(Session["USERNAME"]);
  22. WorkContext.UserEmail = Convert.ToString(Session["USEREMAIL"]);
  23. }
  24.  
  25. // 判断是否是Get请求
  26. WorkContext.IsGet = requestContext.HttpContext.Request.HttpMethod == "GET";
  27.  
  28. // 判断是否是Ajax请求
  29. WorkContext.IsAjax = requestContext.HttpContext.Request.IsAjaxRequest();
  30.  
  31. }
  32.  
  33. }

控制器中使用BaseController

  1. public class HomeController : BaseController
  2. {
  3. public ActionResult Index()
  4. {
  5. var userId = WorkContext.UserId;
  6. var userName = WorkContext.UserName;
  7. return View();
  8. }
  9. }
  10. }

在View(cshtml)中BaseController

我们之所以可以在view中使用html/Model/ajax 都是因为我们继承了WebViewPage。

那我们如何让View能够干我们想干的事情呢,我们可以自定义一个类去重写WebViewPage

  1. public abstract class WebWorkContextWebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel>
  2. {
  3. public WebWorkContext WorkContext;
  4. public sealed override void InitHelpers()
  5. {
  6. base.InitHelpers();
  7. BaseController baseController = ((this.ViewContext.Controller) as BaseController);
  8. if (baseController != null)
  9. {
  10. WorkContext = baseController.WorkContext;
  11. }
  12.  
  13. }
  14. }

我们再去更改view的继承

  1. <system.web.webPages.razor>
  2. <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  3. <pages pageBaseType="WebWorkContextDemo.WebWorkContextWebViewPage">
  4. <namespaces>
  5. <add namespace="System.Web.Mvc" />
  6. <add namespace="System.Web.Mvc.Ajax" />
  7. <add namespace="System.Web.Mvc.Html" />
  8. <add namespace="System.Web.Optimization"/>
  9. <add namespace="System.Web.Routing" />
  10. <add namespace="BossWeb" />
  11. </namespaces>
  12. </pages>
  13. </system.web.webPages.razor>

我们看一看如何去使用

***需要注意的是:这里需要注意的是,我们观察代码就知道,View中的WebWorkContext其实是获取BaseController中的,所以使用WebWorkContext的View所对应的Controller必须继承BaseController

  1. @{
  2. ViewBag.Title = "Home Page";
  3. }
  4.  
  5. 用户的邮箱是: @WorkContext.UserEmail<br />
  6. 用户名是: @WorkContext.UserName<br />
  7.  
  8. @{
  9. var id = WorkContext.UserId;
  10. }

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

asp.net mvc学习(Vs技巧与Httpcontext)的更多相关文章

  1. ASP.NET MVC学习之过滤器篇(2)

    下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成 ...

  2. ASP.NET MVC学习之控制器篇

    一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...

  3. ASP.NET MVC学习之控制器篇扩展性

    原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...

  4. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  5. Asp.Net MVC学习总结之过滤器详解(转载)

    来源:http://www.php.cn/csharp-article-359736.html   一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...

  6. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  7. ASP.NET MVC学习之Ajax(完结)

    一.前言 通过上面的一番学习,大家一定收获不少.但是总归会有一个结束的时候,但是这个结束也意味着新的开始. 如果你是从事ASP.NET开发,并且也使用了第三方控件,那么一定会觉得ASP.NET开发aj ...

  8. ASP.NET MVC学习之视图篇(2)

    继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...

  9. ASP.NET MVC学习系列(二)-WebAPI请求

    继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...

  10. ASP.NET MVC学习系列(二)-WebAPI请求(转)

    转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...

随机推荐

  1. python将多个pdf合成一个

    '''# -*- coding:utf-8*-''' import sys import importlib importlib.reload(sys) import os import os.pat ...

  2. [enum]enum的用法

    ENUM概况 enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的. ENUM定义 C++ e ...

  3. Java 扫描实现 Ioc 动态注入,过滤器根据访问url调用自定义注解标记的类及其方法

    扫描实现 Ioc 动态注入 参考: http://www.private-blog.com/2017/11/16/java-%e6%89%ab%e6%8f%8f%e5%ae%9e%e7%8e%b0-i ...

  4. ABC113 AK失败记

    众所周知, ABC是一场水题盛宴, 也是一场AK盛宴. 但是我却没能AK. 原因也十分可笑: 我在一开始觉得题目太简单, 颓废了.直到我看了第4题之后才找到状态并A了此题...最后时间来不及第三题最后 ...

  5. Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider

    相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...

  6. Spring Cloud微服务笔记(二)Spring Cloud 简介

    Spring Cloud 简介 Spring Cloud的设计理念是Integrate Everything,即充分利用现有的开源组件, 在它们之上设计一套统一的规范/接口使它们能够接入Spring ...

  7. hadoop fs -put 报错

    [hadoop@master ~]$ ll total -rw-rw-r-- hadoop hadoop Apr : aaa drwxr-xr-x hadoop hadoop Jun Desktop ...

  8. 我们来谈谈最近最热门的微信小程序

    最近微信小程序真是火到不行,我们的经理大人也就此给我做了一定的培训.他讲的太好,我实在忍不住跟大家简单分享一下: 1.什么是微信小程序? 一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦 ...

  9. phantomjs api文档

    phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取.页面输出.自动化测试等方面有广泛的应用. 详 ...

  10. 马昕璐/唐月晨 《面向对象程序设计(java)》第十一周学习总结

    一:理论部分. 一般将数据结构分为两大类:线性数据结构和非线性数据结构 线性数据结构:线性表.栈.队列.串.数组和文件 非线性数据结构:树和图. 线性表:1.所有数据元素在同一个线性表中必须是相同的数 ...