MVC 中model的thinkphp大小写问题题,什么时候用大写

1、加密可用:
user.Password = Helper.EncryptPassword(newPass);
&2、在Model里限制数字大小范围:
[Range(0, 120,ErrorMessage="The Qty Available must be between 0 and 120.")]
&3、具有相同关键键值的字段设定方法(常常用在更新数据的时候):
public class Boo
[Key, ForeignKey("Foo")]
public string BooId{get;set;}
public Foo Foo{get;set;}
public class Foo
public string FooId{get;set;}
public Boo Boo{get;set;}
解决的是象下面的情形:
4、Model中&邮箱、手机、密码&字段属性验证方法:
[DisplayName("密码确认:")]
[Required(ErrorMessage = "请再输入一次密码")]
[DataType(DataType.Password)]
[Compare("Password",ErrorMessage="密码和确认密码不相同,请重新输入!")]
public string ConfirmPassword { get; set; }
[DisplayName("Email地址:")]
[Required(ErrorMessage = "请输入您的邮箱地址,方便接受通知、验证邮件等")]
[RegularExpression(@"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$", ErrorMessage = "邮箱格式不正确!请重新输入")]
public string Email { get; set; }
[DisplayName("手机号码:")]
[Required(ErrorMessage = "手机号不得为空")]
[RegularExpression(@"^(13[0-9]|15[0-9]|18[0-9])\d{8}$", ErrorMessage = "手机号码格式不正确!")]
public string Mobile { get; set; }
&5、在Controller的获取参数为Guid类型时,是无法获取的,只能采用string类型的然后再进行转换为Guid类型的,方法如下:
public ActionResult ChangePassword(string userid, ChangePasswordModel password)
Guid getuserid = new Guid(userid);
your code...
&6、如果在Get 的Controller里向View页面转值时,那么在HttpPost的Controller里一定要也要有逻辑表达,不然view出错时可能会丢失值,然后造成错误的出现。
&7、在View页面里ViewBag的动态传值方法:
@if(ViewBag.Title!="用户中心") {@Html.ActionLink("&& "+ViewBag.Title as string,"UserInfo","Index",null,null)}
&8、使用aspnetdb数据库时不需要安装sqlexpress版本而使用本地数据库怎么?
2. 在Web.config文件的ConnectionStrings下加入一段连接字符串的配置:
&remove name="LocalSqlServer" /&
&add name="LocalSqlServer" connectionString="Data Source=Initial Catalog=XXX;Persist Security Info=TUser ID=Password=XXXX"
providerName="System.Data.SqlClient" /&
&9、在View使用RenderAction注意事项:
要使用大括号和分号如:
&li&@{Html.RenderAction("CartSummary", "ShoppingCart");}&/li&
&10、使用ViewBag时有时候字符串会被编码,比如&&&被编码成:&解决办法如下:
@Html.raw(ViewBag.Strlabe);
只要在View页利用Html.Raw就行了
有些地方也许要这样使用:
@("&h1&asdfasd&/h1&")
@(new HtmlString( "&h1&asdfasd&/h1&"))
@(Html.Encode("&h1&asdfasd&/h1&"))
判断语句中使用是:&
@Html.Raw(sitem.BillType==1? "&br/&自定义提单":"")
11、在li中选择一行时显示底色的方法:
&!DOCTYPE html&
&link href="/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&
&script src="/ajax/libs/jquery/1.5/jquery.min.js"&&/script&
&script src="/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&&/script&
&style type="text/css"&
#selectable .ui-selecting {
background:
#selectable .ui-selected {
background:
$(document).ready(function() {
$("#selectable").selectable();
&body style="font-size:62.5%;"&
&ul id="selectable"&
&li&Item 1&/li&
&li&Item 2&/li&
&li&Item 3&/li&
&li&Item 4&/li&
&li&Item 5&/li&
完整效果地址:
12、下拉菜单text自定义显示
要实现的样式如下图:
ViewBag.ProCode = new SelectList(_db.Products.Select(p =& new { p.CodePro, protext = p.ProClass.Name + " | " + p.Material.Name + " | &P" + p.Spec.Name }), "CodePro", "protext");
@Html.DropDownListFor(model =& model.CodePro, ViewBag.ProCode as SelectList, "--请选择--")
&13、多选框的另一种形式
&script src="@Url.Content("~/Script/jquery-1.7.1.min.js")" type="text/javascript"&&/script&
&script src="@Url.Content("~/Chosen/chosen.jquery.min.js")" type="text/javascript"&&/script&
&link href="@Url.Content("~/Chosen/chosen.css")" rel="stylesheet"
type="text/css" /&
@Html.ListBox("CodeStore", ViewBag.StoresList as MultiSelectList, new { @class = "chzn-select", data_placeholder = "请选择仓库", style = "width:350" })
ViewBag.StoresList = new MultiSelectList(_db.Stores.Select(s =& new { s.CodeStore, s.Name }),"CodeStore","Name");
相当关键的一处是:它一定要放在页面的下面,不然不会起反映的
&script type="text/javascript"&
$(".chzn-select").chosen(); &/script&
&14、在Model里设定时间的显示格式方法
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
// Display date data field in the short format 11/12/08.Also, apply format in edit mode.
public System.DateTime AddDate { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm:ss''}")]
DisplayFormat使用说明
格式字符 说明
C 以货币格式显示数值
D 以十进制格式显示数值。
E 以科学记数法(指数)格式显示数值。
F 以固定格式显示数值。
G 以常规格式显示数值。
N 以数字格式显示数值。
X 以十六进制格式显示数值。
格式日期:DataFormatString="{0: yyyy-MM-dd}"   注意这里的M一定要是大写!
格式时间:DataFormatString="{0: hh:mm:ss}"  
说明:大写的M是 Month,小写的m是minute ,注意区别大小写,C#里其它时候了是这样的用法,要区别大小写。
格式字符串 输入 结果
$12,345.68
"{0:C}" - ($12,345.68)
"{0:D}" 12345 12345
"{0:D8}" 12345
1234568E+004
123,456,789.0000
"Total: {0:C}"
Total: $12345.68
其常用的日期格式如下表所示:
格式 说明 输出格式
d 精简日期格式 MM/dd/yyyy
D 详细日期格式 dddd, MMMM dd, yyyy
f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm
F 完整日期时间格式 (long date + long time) dddd, MMMM dd, yyyy HH:mm:ss
g 一般格式 (short date + short time) MM/dd/yyyy HH:mm
G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss
m,M 月日格式 MMMM dd
s 适中日期时间格式 yyyy-MM-dd HH:mm:ss
t 精简时间格式 HH:mm
T 详细时间格式 HH:mm:ss
&15、jquery给文本框赋值
&script src="/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"&&/script&
&script type="text/javascript"&
jQuery(function(){
$("#txt1").blur( function () {
$("#txt2").val("");
$("#txt3").val("");
if($(this).val()&=10&&$(this).val()&0){
$("#txt2").val("一级");
$("#txt3").val("优");
&16、让input没有缓存下拉值并只允许输入数字,其它字符无法输入
@Html.TextBox("PCS",null,new{ autocomplete="off" ,onkeyup="value=value.replace(/[^\\d]/g,'')" ,onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\\d]/g,''))"})
&17、清空input的内容的jquery写法
$("input").val("");
&18、等待几毫秒后再进行下面的操作
//等待几毫秒函数
function sleep(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberM
while (true) {
now = new Date();
if (now.getTime() & exitTime)
&19、把字符型日期转换为日期型的方法Convert.ToDateTime 方法 (String) 将日期和时间的指定字符串表示形式转换为等效的日期和时间值。
public static DateTime ToDateTime(
string value
DateTime.Parse 方法 (String) 将日期和时间的指定字符串表示形式转换为其等效的 DateTime。
public static DateTime Parse(
&20、把Decimal类型保留 两位小数
decimal money1 = Decimal.Parse(Value.ToString("#0.00"));
&21、怎样解决:未找到路径&&&&的控制器或该控制器未实现 IController?
@{Html.RenderAction("Cartsummary","ShoppingCart",new{area=""});}
@Html.Action("MenuItems", "Common", new {area="" })
就是要加上new{area=""}
&22、当MVC添加区域的时候,如果在最外围的公共层_Layout.cshtml有链接到Area内的actionName和controllerName那么要这样写:
@Html.ActionLink("完善您的资料并提交证件申请正式会员&&", "RegMember", "Member", new { Area = "User" }, new { @class = "" })
其中User指的是Area内的其中一个区域,有时候Area内可能会有多个区域,比如:Mana、User、Pub等
23、Jquery把字符型数字转化为可以比较的数字类型
var datapcs = parseInt($("#PCS").val());
使用parseInt
&24、不允许使用浏览器的后退按钮(在有购物车的时候特别有用)在Global.asax里添加如下代码:
Application_BeginRequest(Object
HttpContext.Current.Response.Cache.SetNoStore();
&25、怎样模糊查询当天全部日期包括当天的小时/秒/毫秒
数据库中有A字段 DateTime类型
存储的是 年月日 时分秒
页面中输入 年月日 即模糊匹配 字段A 并返回所有包含此年月日的数据。
数据库中有以下数据
2011-01-01 12:02:45
2011-01-02 12:02:45
2011-01-01 12:02:45
2011-01-03 12:02:45
页面搜索输入: 2011-01-01 即返回
2011-01-01 12:02:45
2011-01-01 12:02:45
方法如下:
DateTime? SearchTime =new DateTime(2011,1,1);
var query = db.TableName.Where(w =& System.Data.Objects.EntityFunctions.DiffDays(w.A, SearchTime) == 0);
&26、怎么处理MVC3中出现的&未将对象引用设置到对象的实例&所引发的异常?
在处理显示类时注意要用:@Html.DisplayFor(item=&item.User) 而不要直接使用:@Model.User如果这样使用,当Model为空时就会引发上述异常!
27、Splic用法
1、用字符串分隔:
using System.Text.RegularE
string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "&br&");
输出结果:
2、用多个字符来分隔:
string str="aaajbbbscccjdddseee";
string[] sArray=str.Split(new char[2] {'j','s'});
foreach(string i in sArray) Response.Write(i.ToString() + "&br&");
输出结果:
3、用单个字符来分隔:
string str="aaajbbbjccc";
string[] sArray=str.Split('j');
foreach(string i in sArray) Response.Write(i.ToString() + "&br&");
输出结果:
////////////////////////////////////////////////
string[] arr = str.Split("o");
这是一个具有语法错误的语句,Split 的 separator 参数应该是 char[] 或 string[],不应是字符串。正确的示例:
string str = "technology";
char[] separator = { 'o' };
string[] arr = str.Split(separator);
////////////////////////////////////////////////////
String.Split 方法有6个重载函数:
1) public string[] Split(params char[] separator)
2) public string[] Split(char[] separator, int count)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)
下边我们通过一些实例来说明下怎么使用(以下string words = "1,2.3,,4";):
1. public string[] Split(params char[] separator)
string[] split = words.Split(new Char[] { ',' });//返回:{"1","2.3","","4"}
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}
2. public string[] Split(char[] separator, int count)
string[] split = words.Split(new Char[] { ',', '.' }, 2);//返回:{"1","2.3,,4"}
string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}
3. public string[] Split(char[] separator, StringSplitOptions options)
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
4. public string[] Split(string[] separator, StringSplitOptions options)
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
5. public string[] Split(char[] separator, int count, StringSplitOptions options)
string[] split = words.Split(new Char[] { ',', '.' }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
6. public string[] Split(string[] separator, int count, StringSplitOptions options)
string[] split = words.Split(new string[] { ",", "." }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
需要注意的是没有重载函数public string[] Split(string[] separator),所以我们不能像VB.NET那样使用words.Split(","),而只能使用words.Split(',')
&28、MVC3中删除&主表&其相关的&从表&也跟着删除或者更新的方法是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity&User&() .HasRequired(e =& e.UserMemship)
.WithRequiredPrincipal() .WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
&29、点击多行中一个&td&里的内容可以下拉菜单
&script type="text/javascript" language="javascript"&
$(document).ready(function () {
$(".companyinfo").mouseenter(function () {
var txt = $(this).attr("id_data");
t_delay = setTimeout(function () {
$("#" + txt).fadeIn("slow");
$(".companyinfo").mouseleave(function () {
clearTimeout(t_delay);
var txt = $(this).attr("id_data");
$("#" + txt).fadeOut("slow");
&style type="text/css"&
.companyinfo{position: margin:0cursor: }
.infocontent{ width:330
padding:2px 2px 2px 2 background-color:# border:#ACACAC solid 1position: top:26
z-index:99999;display: }
.info_td{ text-align: background-color:#eeeeee}
class="companyinfo" id_data="@item.UserId"&@Html.DisplayFor(m=&pany)
&img src="/Content/images/prompt.png" alt="点击查看更多详情" /&
id="@item.UserId" class="infocontent"&
&tr&&td class="info_td"&地址:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.Address)&/td&&/tr&
&tr&&td class="info_td"&法人:&/td&&td &@Html.DisplayFor(m=&item.UserMemship.LegalPerson)&/td&&/tr&
&tr&&td class="info_td"&城市:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.City.Name)&/td&&/tr&
&tr&&td class="info_td"&注册资本:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.RegCapital)&/td&&/tr&
&tr&&td class="info_td"&开发银行:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.OpeningBank)&/td&&/tr&
&tr&&td class="info_td"&开户行:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.DepositBank)&/td&&/tr&
&tr&&td class="info_td"&开户账号:&/td&&td&@Html.DisplayFor(m=&item.UserMemship.AccountBank)&/td&&/tr&
&tr&&td class="info_td"&税号:&/td&&td&@Html.DisplayFor(m =& item.UserMemship.TaxNumber)&/td&&/tr&
&30、对于集合中重复的项,要过滤重复项,必须要配合Select命令:Distinct()才起作用。
var materials_dis= _db.Products.Where(m =& m.CodeClass == c).Select(p =& new DDMaterial() { CodeMaterial = p.CodeMaterial, Name = p.Material.Name }).Distinct();
//过滤重复项,必须要配合Select命令:Distinct()才起作用。
var materials = materials_dis.ToList().Select(m =& new SelectListItem() { Text = m.Name != null ? m.Name : "[没有数据]", Value = m.CodeMaterial});
return Json(materials, JsonRequestBehavior.AllowGet);
&31、根据不同的值显示不同的链接信息的方法可以使用Url:
&a href="@Url.Action(...)"&LinkText&/a&
然后再使用自定义的@helper函数来判断LinkText应该怎么显示
32、由于注册两个相同的控制器而出现无法找到匹配的控制的错误,如:
// 找到多个与名为&Order&的控制器匹配的类型。如果为此请求(&{controller}/{action}/{id}&)提供服务的路由在搜索匹配此请求的控制器时没有指定命名空间,则会发生此情况。如果是这样,请通过调用含有&namespaces&参数的&MapRoute&方法的重载来注册此路由。
//&Order&请求找到下列匹配的控制器:
//Proweb.Areas.Mana.Controllers.OrderController
//Proweb.Controllers.OrderController
解决办法是&ManaAreaRegistration.cs&和&Global.asax&分别加上Router的命名空间即可,如下:在根下加:new string[]{"Proweb.Controllers"}
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[]{"Proweb.Controllers"}
在Area的Mana下加:new string[] {"Proweb.Areas.Mana.Controllers"}
context.MapRoute(
"Mana_default",
"Mana/{controller}/{action}/{id}",
new {controller="Index", action = "Index", id = UrlParameter.Optional },
new string[] {"Proweb.Areas.Mana.Controllers"}
&33、Include在Linq To Entity中的作用请看如下例子:一个&风格流派&包含多个&专辑&,点击其中一个流派则可以返回此流派我多个列表
Models应该加List&Album&
public partial class Genre
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List&Album& Albums { get; set; }
//如果不加这个会出现:指定的 Include 路径无效。EntityType&MvcMusicStore.Models.Genre&未声明具有名称&Albums&的导航属性。
//var genreModel = storeDB.Genres.Include("Albums").Single(g =& g.Name == genre);
public ActionResult Browse(string genre)
var genreModel = storeDB.Genres.Include("Albums").Single(g =& g.Name == genre);
//Include:指定要包括在查询结果中的相关对象,要在查询结果中返回的相关对象列表(以点号分隔)。参考:/zh-cn/bb738708
return View(genreModel);
@model MvcMusicStore.Models.Genre
ViewBag.Title = "Browse";
&h2&Browsing Genre: @Model.Name&/h2&
&ul id="album-list"&
@foreach (var album in Model.Albums)
&a href="@Url.Action("Details",new{id=album.AlbumId })"&&img alt="@album.Title" src="@album.AlbumArtUrl" /&&/a&
&li&@Html.ActionLink(album.Title,"details",new{id=album.AlbumId})&/li&
&34、获取id值的方法
如果url是 /home/index?id=3 直接Request就ok。
但是如果路由设定为:{controller}/{action}/{id}
url是 /home/index/3 这时想在页面View中获取参数id的值,该怎么获取?&
查了下资料好多人都利用Action获取到参数值后,用Viewdata传到View中例如Controlers中的phonelist这样定义 public ActionResult phonelist(int id) { ViewData["id"] = return View(); } 其实,没有必要,只要在view中这样获取就可以:
&%=Html.ViewContext.RouteData.Values["id"]%&
就算没有id的参数也不会报错。&
&%=Request.RequestContext.RouteData.Values["id"] %&和&%=Html.ViewContext.RouteData.Route.GetRouteData(Html.ViewContext.HttpContext).Values["id"]%&也可以取到。
在用户控件中是无法直接访问到RouteData,RouteData是Page对象中的属性,
所以需要在用户控件中使用this.Page.RouteData来获取参数
使用this.Page.RouteData.Values["id"]来获取参数的值
35、小数点后显示两位小数的方法
float f=1.;string d=f.ToString("#.00");
如果是计算的时候想保留可以这么弄:float f=1.F;f=((int)Math.Round(f*100))/100.0F;
// f的结果为 1.23f.ToString("#.00");
//显示结果为1.23
&36、提交验证
&script type="text/javascript"&
function validate() {
var gimport = $("#import").val();
if (gimport == "") {
alert("请先选择文件!");
return false;
&input type="submit" value="开始导入!" name="save" onclick="javascript:return validate();"/&
阅读(...) 评论()springmvc 绑定数据,如何让属性大小写不区分 - ITeye问答
表单Form里头的&input name="USERNAME" value=""/&name是大写的,
可是我的User类里头是的属性是:userName,
请问有没办法绑定时不区分大小写?
没有办法,除非改Spring源码吧?
HTML不区分大小写,为何不改HTML?
已解决问题
未解决问题相关文章推荐
I:ASP.NET MVC3在Visual Studio 2010中的变化
在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化
1.ASP.NET MVC3...
本篇博文将进入MVC 3 的世界了,首先学习一下MVC 3 新增的Razor视图引擎的基本语法。
1. 使用 @ 字符将代码添加到页面中。正如传统的aspx视图的相同。
下面代码是介绍...
默认建的工程都自带的了一个_ViewStart.cshtml文件,文件里面的代码如下:
[csharp] view
plaincopyprint?
默认建的工程都自带的了一个_ViewStart.cshtml文件,文件里面的代码如下:
view plaincopyprint?
@{ Layou...
之前体验过razor视图引擎@符号的威力了吧~
I:ASP.NET MVC3在Visual Studio 2010中的变化
  在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化。
  1.ASP.N...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)相关文章推荐
Random r = new Random();
str = string.E
for (int i = 0; i < 5; i++)
以username为例,假如都以这个单词命名变量、参数等,在来回传值过程中很容易混乱,当然大可不必非要单调使用这一个单词,但是它也有好处,比如说在传值的时候不用考虑我需要传变量的到底被我定义成什么名字...
t" runat="server">
$(document).ready(function(){
上一次说到,我第一次使用CKeditor是用在的新弹出一个页面,即js的showdialogmodel,这时候是直接在该aspx页面引用CKeditor.js和CKfinder.js。第二次是在主页面...
1。使用QueryString
使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不...
项目中前端jsp页面中有复选框,需要使用到ajax把这些值传递到java后台的操作。因为还需要返回数据到前端页面,所以无法使用form表单提交。
(对了,我在一群里问了这个问题,然后两个热心...
关于android开发中JS与webview进行交互的文章网上已经很多,但是百度搜了一下关于源生代码向JS中传递返回值的问题说法五花八门,在此将项目中解决办法记录一下
public class Ma...
Hadoop,往map/reduce中传值的问题解决方法实例最近在看一些map/reduce的程序,其中遇到一个问题:就是在类中定义的属性无法被mapreduce程序直接获取。具体代码如下public...
目前看到了网络请求,并且也会用AFNetworking类库进行Json的解析,但是想大家也会想,每次都在ViewController获取请求,似乎有些繁琐,那么能不能单独写一个类,直接返回我请求出来的...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)本次在使用的使用采用前后端开发,因此在前段已完成UI设计以及按照RAP来完成数据的模拟获取的情况下,后台返回字段出现了json数据的默认格式化。
这就很头疼了,再让前端再去改明显会浪费很多的时间,因此决定解决这个问题。
首先上网搜索信息,在网上只查到了asp.net webapi的解决方案,但是也为我大概指明了方向。
这是解决方案的代码:
public static class WebApiConfig {
public static void Register(HttpConfiguration config)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
// 取消注释下面的代码行可对具有 IQueryable 或 IQueryable&T& 返回类型的操作启用查询支持。
// 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
// 有关详细信息,请访问 /fwlink/?LinkId=279712。
//config.EnableQuerySupport();
// 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
// 有关详细信息,请参阅: http://www.asp.net/web-api
config.EnableSystemDiagnosticsTracing();
// 干掉XML序列化器
config.Formatters.Remove(config.Formatters.XmlFormatter);
// 解决json序列化时的循环引用问题
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.I
// 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式.
//config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver();
// 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
我们需要做的就是将mvc的序列化装换器设置成DefaultContractResolver;
那接下来就把从Core中来实现这个问题:
首先从mvc来判断应该在AddMvc方法中进行数据操作,那接下来接续为其按上述步骤设置
首先添加一个新的JsonJsonSerializerSettings,将ContractResolver 设置成DefaultContractResolver ,并将生成一个的JsonOutputFormatter格式器来存放
为了防止其他的格式器影响结构将所有的格式器,只剩下该格式器来序列化json数据。
并将新生成的JsonOutputFormatter插入到第一个。
services.AddMvc(options =& { var JsonSerializerSettings = new JsonSerializerSettings(); JsonSerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.I JsonSerializerSettings.ContractResolver = new DefaultContractResolver(); var jsonOutputFormatter = new JsonOutputFormatter(JsonSerializerSettings, ArrayPool&char&.Shared); options.OutputFormatters.RemoveType&JsonOutputFormatter&(); options.OutputFormatters.RemoveType&TextOutputFormatter&(); options.OutputFormatters.RemoveType&HttpNoContentOutputFormatter&(); options.OutputFormatters.Insert(0, jsonOutputFormatter); });
结果返回json数据仍存在问题,这就郁闷了,经过多次测试依旧出现问题。
那就试试另一种方式:
在模型类中为模型参数指明JsonProperty参数名试试,看数据是否仍旧会被格式化掉。
[JsonProperty("EntrustId")] public uint EntrustId { }
结果在单一数据指明JsonProperty之后返回字段终于解决了。但是这样的方式只能是一种替代方案,在本质上仍然未解决问题,于是我决定继续解决这个问题。
按照第一次的思路来说问题应该没有问题,但是为什么不能解决问题呢。继续bing查资料吧。。。 终于找到了明灯:&额,感觉没天理了。。。
问题出在Asp.Net Core 和 Asp.Net一样已经为我们集成好了这些配置。
我们只需要在services.AddMvc().AddJsonOptions()中设置ContractResolver 即可。代码非常简单:
services.AddMvc().AddJsonOptions(options=&{ options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
*这个问题花了很久时间解决,但是感觉很值,特别是看到最后的问题的时候感觉自己豁然开朗的感觉。问题很简单,但是每一步都花费了自己很多心思。
阅读(...) 评论()

我要回帖

更多关于 http请求头大小写问题 的文章

 

随机推荐