MVC学习笔记(六)---遇到的小问题汇总
阅读原文时间:2023年07月08日阅读:2

一、MVC中Controller中返回两个对象的写法如下:

return Json(new { code = , 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
{
未发送 = ,
发送成功 = ,
发送失败 =
}
}

A.在前台(Index.cshtml)用枚举

(1)在web项目中添加Common类库的引用

(2)记得要在Index.cshtml页面头部添加引用

@using Common.Enum;

Index

  • @Enum\_Type.未发送
  • @Enum\_Type.发送成功
  • @Enum\_Type.发送失败

效果(样式我都没写,只是想展示下效果)

(3)在js里的用法

B.枚举常用的方法(我每次用每次查,捂脸中)

//根据名称获取对应的数字,结果为:3
int enum_Int =(int) Enum.Parse(typeof(Enum_Type), "发送失败");
//根据数字获取名称,结果为发送失败
string enum_String = Enum.GetName(typeof(Enum_Type), );

//获取枚举类型的数字,结果为:3
int enumInt = (int)Enum_Type.发送失败;
//获取枚举类型的字符串,结果为发送失败
string enumString = Enum_Type.发送失败.ToString();

四、controller中参数设置为可为空的方法

     \[HttpPost\]  
     public ActionResult test(string userName,DateTime? startTime)  
     {  
         DateTime dt = startTime == null ? DateTime.Now : startTime.Value;  
         return Content("成功");  
     }

使用场景:参数startTime可以传也可以不传

五、计算分页页数需要用到的方法

1    //总页数
decimal d = (decimal)((decimal)roleList.Count / length);
roleList = roleList.OrderBy(r => r.OrderNo).Skip((start - ) * length).Take(length).ToList();
int pageCount = Convert.ToInt32(Math.Ceiling(d));
result.PageCount = pageCount;

六、webapi

(1)webapi中action的名称要以Get或者Post开头,来说明是用的HttpPost还是HttpGet。

(2)参数要通过[FromBody]传递,如果直接写string para,反而接收不到。

     public string PostLogin(\[FromBody\] PostData data)  
     {  
         return "登录成功";  
     }

PostData类里放需要的参数

     /// <summary>  
     /// 参数  
     /// </summary>  
     public class PostData  
     {  
         /// <summary>  
         /// 用户名  
         /// </summary>  
         public string userName { get; set; }

         /// <summary>  
         /// 密码  
         /// </summary>  
         public string password { get; set; }  
     }

七、根据固定数据进行数字进行四舍五入/舍去后面的数字

**来源(https://www.tceic.com/708ih500l18583j0496459i9.html)**

     /// <summary> /// 四舍五入 /// </summary>  
     /// <param name="d">输入的数字</param>  
     /// <param name="i">保留的位数</param>  
     /// <returns></returns>  
     private static double Round(double data, int i)  
     {  
         if (data >= )  
         {  
             data +=  \* Math.Pow(, -(i + ));  
         }  
         else  
         {  
             data += - \* Math.Pow(, -(i + ));  
         }  
         string str = data.ToString();  
         string\[\] strs = str.Split('.');  
         int idot = str.IndexOf('.');  
         string prestr = strs\[\];  
         string poststr = strs\[\];  
         if (poststr.Length > i)  
         {  
             poststr = str.Substring(idot + , i);  
         }  
         string strd = prestr + "." + poststr;  
         data = Double.Parse(strd);  
         return data;  
     }

     /// <summary> /// 小数位数值舍位 /// </summary>  
     /// <param name="a">保留的数字</param>  
     /// <param name="n">位数</param>  
     /// <returns></returns>  
     public static double Round2(double a, int n)  
     {

         int b = a.ToString("").Length;  
         int c = a.ToString().Length;  
         int d = ; if (c > b)  
         {  
             d = c - b - ;  
         }  
         if (n < d)  
         {  
             string Last = a.ToString().Substring(, b +  + n); a = double.Parse(Last);  
         }  
         return a;  
     }

八、两个整数相除,精度缺失的解决办法

  1.如下代码,v的数值为1

double v = / ;

  2.想要保留所得的小数的解决方法:

         //第一种方法  
         decimal v = (decimal) / ;  
         //第二种方法  
         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);均尝试,都不成功。

  十一、程序中后台返回的结果类定义

 public class DataResult<T> where T : class  
 {  
     public DataResult()  
     {  
         //默认成功  
         Code = ;  
         DataList = new List<T>();  
     }  
     /// <summary>  
     /// 状态码  
     /// </summary>  
     public int Code { get; set; }  
     /// <summary>  
     /// 返回信息  
     /// </summary>  
     public string Msg { get; set; }  
     /// <summary>  
     /// 返回详细码  
     /// </summary>  
     public int Sub\_Code { get; set; }  
     /// <summary>  
     /// 返回详细信息  
     /// </summary>  
     public string Sub\_Msg { get; set; }  
     /// <summary>  
     /// 返回数据模型  
     /// </summary>  
     public T Data { get; set; }  
     /// <summary>  
     /// 返回数据模型集合  
     /// </summary>  
     public List<T> DataList { get; set; }  
     /// <summary>  
     /// 总页数  
     /// </summary>  
     public int PageCount { get; set; }  
     /// <summary>  
     /// 总条数  
     /// </summary>  
     public int Total { get; set; }  
 }

十二、转义特殊字符

        string test = "<scrpit>";  
        string testS = HttpUtility.HtmlEncode(test);  
        //对转义字符特殊处理(如果是\\,前台用JSON.parse转json会报错)  
        testS = testS.Replace("\\\\", "\\\\\\\\");

十三、Autofac.Integration.Mvc在nugut中名称为Autofac.Mvc5

写在后面的话:都是一些基本的功能,但是自己总是记不住,每次用每次需要查阅。现在记录下来方便自己进行查看。