zoukankan      html  css  js  c++  java
  • asp.net mvc 表单相关

    1. <form action="/controller/action" method="post">

        ...

        </form>

        *action 属性指定表单要提交到的网页地址

        *method 属性指定表单提交时使用的方法(如: get , post)

    2. 表单提交按钮可以使用<input type="submit" value="Submit">或<button type="submit">Submit</button>

        *推荐使用<button>标签

    3. MVC 中的 action 可以使用 [HttpGet] 或 [HttpPost] 特性来限制 action 只接受get请求或post请求

        *如果 action 没有添加 [HttpGet] 或 [HttpPost] 特性,则两种方式的请求都接受

    4. 在视图中获取模型状态对象,使用 ViewData.ModelState

        例:获取模型验证的错误信息并显示

            @if (ViewData.ModelState["Name"] != null && ViewData.ModelState["Name"].Errors.Count > 0)
            {
                <span class="help-block">@ViewData.ModelState["Name"].Errors[0].ErrorMessage</span>
            }

     5. 表单隐藏字段

        <input type="hidden" name="name" value="value" />

    6. 注意表单重复提交问题,当用户发生多次点击提交按钮,刷新页面,后退页面后再次点击提交等操作时会重复提交表单。

        *可在客户端或服务端等多个位置进行检测以防止重复提交,比如在服务端使用guid值标识表单

    7. 注意CSRF(跨站请求伪造)攻击

        *在asp.net mvc中提供了 ValidateAntiForgeryToken 特性和 @Html.AntiForgeryToken() 辅助方法

    8. 注意过多提交问题,模型绑定时如果没有加以限制,将会在http请求中搜索并绑定所有的模型属性,当用户恶意提交了没有在表单中使用的属性时也会被绑定

        *使用 [Bind] 特性限制要绑定的属性

        例:使用 [Bind] 特性的 Include 属性设置绑定白名单,限制只有名单内的模型属性才会被绑定(多个属性名称之间使用逗号分隔)

            [HttpPost]
            public ActionResult AddModel([Bind(Include = "Name")]Model model)
            {
                if (ModelState.IsValid)
                {
                    return RedirectToAction("Action");
                }
    
                return View(model);
            } 

     9. http请求中的参数的名称与Action方法中参数的名称不区分大小写

  • 相关阅读:
    sqlserver和Oracle内部的错误数据修复(DBCC、DBMS_REPAIR)
    通过Oracle补充日志,找到锁阻塞源头的SQL
    禁用sqlserver的锁升级
    [转]SQLServer2008日志文件无法收缩处理方法
    Oracle警告、跟踪文件(10046、死锁等跟踪)
    dbms_stats包更新、导出、导入、锁定统计信息
    BulkCopy频繁执行产生的性能问题
    Oracle表空间不足
    组合索引字段顺序引发的死锁问题
    如何清除某条SQL的执行计划
  • 原文地址:https://www.cnblogs.com/gmcn/p/6180808.html
Copyright © 2011-2022 走看看