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方法中参数的名称不区分大小写

  • 相关阅读:
    PHP的命令行脚本调用
    JAVA使用jar命令制作可执行GUI程序
    PHP的代理模式
    PHP中的__clone()
    PHP使用反射动态加载第三方类
    NAT小记
    JAVA睡眠理发师代码记录
    PHP通过反射获得类源码
    PHP中单引号双引号的区别
    [转载]PHP导出数据库数据字典脚本
  • 原文地址:https://www.cnblogs.com/gmcn/p/6180808.html
Copyright © 2011-2022 走看看