首页 技术 正文
技术 2022年11月14日
0 收藏 964 点赞 2,398 浏览 3449 个字

模型绑定分析

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

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);
}
});

asp.net mvc学习(Vs技巧与Httpcontext)

复制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)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,286