一、MVC中Controller中返回两个对象的写法如下:
return Json(new { code = 1, msg = "成功", user = user, userInfo = person });
二、前台向后台传入带有html标签的字符串,需要在后台Controller前加入[ValidateInput(false)]
[HttpPost] [ValidateInput(false)] public ActionResult Test(string str) { return Content("test"); }
三、枚举用法的总结:
工程目录结构如下:
Enum_Type中的代码如下:
namespace Common.Enum { public enum Enum_Type { 未发送 = 1, 发送成功 = 2, 发送失败 = 3 } }
A.在前台(Index.cshtml)用枚举
(1)在web项目中添加Common类库的引用
(2)记得要在Index.cshtml页面头部添加引用
@using Common.Enum; <h2>Index</h2> <ul> <li data-id="@Convert.ToInt32(Enum_Type.未发送)">@Enum_Type.未发送</li> <li data-id="@Convert.ToInt32(Enum_Type.发送成功)">@Enum_Type.发送成功</li> <li data-id="@Convert.ToInt32(Enum_Type.发送成功)">@Enum_Type.发送失败</li> </ul> <select> <option value="@Convert.ToInt32(Enum_Type.未发送)">@Enum_Type.未发送</option> <option value="@Convert.ToInt32(Enum_Type.发送成功)">@Enum_Type.发送成功</option> <option value="@Convert.ToInt32(Enum_Type.发送成功)">@Enum_Type.发送失败</option> </select>
效果(样式我都没写,只是想展示下效果)
(3)在js里的用法
<script type="text/javascript"> var state = 0; if(state=='@((int)Enum_Type.未发送')) { } </script>
B.枚举常用的方法(我每次用每次查,捂脸中)
1 //根据名称获取对应的数字,结果为:3 2 int enum_Int =(int) Enum.Parse(typeof(Enum_Type), "发送失败"); 3 //根据数字获取名称,结果为发送失败 4 string enum_String = Enum.GetName(typeof(Enum_Type), 3); 5 6 //获取枚举类型的数字,结果为:3 7 int enumInt = (int)Enum_Type.发送失败; 8 //获取枚举类型的字符串,结果为发送失败 9 string enumString = Enum_Type.发送失败.ToString();
四、controller中参数设置为可为空的方法
1 [HttpPost] 2 public ActionResult test(string userName,DateTime? startTime) 3 { 4 DateTime dt = startTime == null ? DateTime.Now : startTime.Value; 5 return Content("成功"); 6 }
使用场景:参数startTime可以传也可以不传
五、计算分页页数需要用到的方法
1 //总页数 2 decimal d = (decimal)((decimal)roleList.Count / length); 3 roleList = roleList.OrderBy(r => r.OrderNo).Skip((start - 1) * length).Take(length).ToList(); 4 int pageCount = Convert.ToInt32(Math.Ceiling(d)); 5 result.PageCount = pageCount;
六、webapi
(1)webapi中action的名称要以Get或者Post开头,来说明是用的HttpPost还是HttpGet。
(2)参数要通过[FromBody]传递,如果直接写string para,反而接收不到。
1 public string PostLogin([FromBody] PostData data) 2 { 3 return "登录成功"; 4 }
PostData类里放需要的参数
1 /// <summary> 2 /// 参数 3 /// </summary> 4 public class PostData 5 { 6 /// <summary> 7 /// 用户名 8 /// </summary> 9 public string userName { get; set; } 10 11 /// <summary> 12 /// 密码 13 /// </summary> 14 public string password { get; set; } 15 }
七、根据固定数据进行数字进行四舍五入/舍去后面的数字
来源(https://www.tceic.com/708ih500l18583j0496459i9.html)
1 /// <summary> /// 四舍五入 /// </summary> 2 /// <param name="d">输入的数字</param> 3 /// <param name="i">保留的位数</param> 4 /// <returns></returns> 5 private static double Round(double data, int i) 6 { 7 if (data >= 0) 8 { 9 data += 5 * Math.Pow(10, -(i + 1)); 10 } 11 else 12 { 13 data += -5 * Math.Pow(10, -(i + 1)); 14 } 15 string str = data.ToString(); 16 string[] strs = str.Split('.'); 17 int idot = str.IndexOf('.'); 18 string prestr = strs[0]; 19 string poststr = strs[1]; 20 if (poststr.Length > i) 21 { 22 poststr = str.Substring(idot + 1, i); 23 } 24 string strd = prestr + "." + poststr; 25 data = Double.Parse(strd); 26 return data; 27 }
1 /// <summary> /// 小数位数值舍位 /// </summary> 2 /// <param name="a">保留的数字</param> 3 /// <param name="n">位数</param> 4 /// <returns></returns> 5 public static double Round2(double a, int n) 6 { 7 8 int b = a.ToString("0").Length; 9 int c = a.ToString().Length; 10 int d = 0; if (c > b) 11 { 12 d = c - b - 1; 13 } 14 if (n < d) 15 { 16 string Last = a.ToString().Substring(0, b + 1 + n); a = double.Parse(Last); 17 } 18 return a; 19 }
八、两个整数相除,精度缺失的解决办法
1.如下代码,v的数值为1
double v = 3 / 2;
2.想要保留所得的小数的解决方法:
1 //第一种方法 2 decimal v = (decimal)3 / 2; 3 //第二种方法 4 double v1 = 3.0 / 2.0;
九、ie浏览器会直接下载json文件解决方案
如果前台框架使用的是easyui,页面表单提交(post提交则不会出现该问题),后台返回的结果如果为下图所示,则ie浏览器会直接将json文件进行下载。
return Json(result, JsonRequestBehavior.AllowGet);
需改为如下写法即可
return Content(JsonConvert.SerializeObject(result));
十、winform中强制关闭所有进程
需求场景:winfrom应用程序中有N个窗体,但是要求:点击任一窗体上的关闭按钮(自定义的按钮,并非是窗体自带的),整个进程退出。
解决方法:
System.Diagnostics.Process.GetCurrentProcess().Kill();
错误尝试: Application.Exit();System.Environment.Exit(0);均尝试,都不成功。
十一、程序中后台返回的结果类定义
1 public class DataResult<T> where T : class 2 { 3 public DataResult() 4 { 5 //默认成功 6 Code = 1000; 7 DataList = new List<T>(); 8 } 9 /// <summary> 10 /// 状态码 11 /// </summary> 12 public int Code { get; set; } 13 /// <summary> 14 /// 返回信息 15 /// </summary> 16 public string Msg { get; set; } 17 /// <summary> 18 /// 返回详细码 19 /// </summary> 20 public int Sub_Code { get; set; } 21 /// <summary> 22 /// 返回详细信息 23 /// </summary> 24 public string Sub_Msg { get; set; } 25 /// <summary> 26 /// 返回数据模型 27 /// </summary> 28 public T Data { get; set; } 29 /// <summary> 30 /// 返回数据模型集合 31 /// </summary> 32 public List<T> DataList { get; set; } 33 /// <summary> 34 /// 总页数 35 /// </summary> 36 public int PageCount { get; set; } 37 /// <summary> 38 /// 总条数 39 /// </summary> 40 public int Total { get; set; } 41 }
十二、转义特殊字符
string test = "<scrpit>"; string testS = HttpUtility.HtmlEncode(test); //对转义字符特殊处理(如果是,前台用JSON.parse转json会报错) testS = testS.Replace("\", "\\");
十三、Autofac.Integration.Mvc在nugut中名称为Autofac.Mvc5
写在后面的话:都是一些基本的功能,但是自己总是记不住,每次用每次需要查阅。现在记录下来方便自己进行查看。