模型绑定分析

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

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 = ;
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": "",
"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/

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. Little Sub and Mr.Potato's Math Problem-构造

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5864 思路 : 判断小于它的合法的,再看大于它的合法的,特判10000. ...

  2. Metasploit远程调用Nessus出错

    Metasploit远程调用Nessus出错   从Nessus 7.1开始,Metaspliot远程调用Nessus创建新的扫描任务,会出现以下错误信息:   [*] New scan added ...

  3. C++第二课:指针常用法[个人见解]

    在小编这里,没有任何学习知识的顺序,写到的东西对初学者肯定是有用处的,前提,你真的把C语言学完的那些初学者. 在讲明指针的知识前,或许有人一直说不会指针你学不会C++,或者说你所学C++的深度,全凭你 ...

  4. mysql的复习

    . 着重号,区分字段和关键字的符号 +号是运算的 起别名,其中的as可以省略 ifnull(expr1,expr2),expr1代表输入的字段,expr2代表如果输入的字段是null则为expr2 条 ...

  5. typeof获取变量的数据类型 javascript

    获取变量的数据类型:typeof <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  6. elasticsearch 文档资料

    1.Function Score Query 自定义查询评分 https://www.elastic.co/guide/en/elasticsearch/reference/current/query ...

  7. error C2371: 'IServiceProvider' : redefinition; different basic types

    需要将#include <windows.h>放到using namespace System;前面. #include <windows.h>using namespace ...

  8. XP .Net 4.0使用Microsoft.Bcl需要安装XP补丁NDP40-KB2468871-v2-x86

    XP .Net 4.0使用Microsoft.Bcl需要安装XP补丁NDP40-KB2468871-v2-x86

  9. 关于Python2 与 Python3 的区别

    Python是一门动态解释性的强类型定义语言. 1.Python2 : ①.臃肿,源代码的重复量很多.   ②.语法不清晰,掺杂着C,php,Java的一些陋习. Python3 : 几乎是重构后的源 ...

  10. 关于部署php遇到的坑

    业务突然要启动一个久不使用的PHP项目, 发现部署到centos7上后 各种报错 就是不行. 我怀疑是apache或者php问题 就重新安装 编译安装也试过就是不行. 只能按笨办法 在测试环境安装了a ...