zoukankan      html  css  js  c++  java
  • MVC学习笔记(六)---遇到的小问题汇总

    一、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

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

  • 相关阅读:
    使用迭代器模式批量获得数据(C#实现)
    如何从技术上预防抢票软件刷屏
    如何用Tesseract做日文OCR(c#实现)
    我的.net开发百宝箱
    程序员必备基础:Git 命令全方位学习
    Java 异常处理的十个建议
    50道Java集合经典面试题(收藏版)
    记一次接口性能优化实践总结:优化接口性能的八个建议
    100道MySQL数据库经典面试题解析(收藏版)
    800+Java后端经典面试题,希望你找到自己理想的Offer呀~
  • 原文地址:https://www.cnblogs.com/jas0203/p/9818457.html
Copyright © 2011-2022 走看看