默认

 

方法1

[ValidateInput(false)]

这个方法会完全开放,对于有些字段允许,有些字段不允许的情况,是不会检测的

 

方法2

[AllowHtml]

此方法只有再使用DefaultModelBinder的时候才有效

public ActionResult Index(FormCollection form)

如使用FormCollection是不起作用的。因为FormCollection与具体的Model并无关联

 

检测不通过,就报错的方式似乎也并不是很友好,如果输入的文本确实需要包含<script标签,那就没法添加成功了

假设允许输入,但是自动传唤成HtmlEncode形式,是否会更好。

可采用自定义ModelBinder的方式

public class MvcHtmlModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
var propertyMetadata = bindingContext.PropertyMetadata[propertyDescriptor.Name];
if (propertyMetadata.RequestValidationEnabled && propertyDescriptor.PropertyType == typeof(string) && value != null && !string.IsNullOrEmpty(value.ToString()))
{
value = value.ToString()
.Replace("<script", "&lt;script")
.Replace("</script>", "&lt;/script&gt;");
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}

在global里

ModelBinders.Binders.Add(typeof(TestModel), new MvcHtmlModelBinder());

这样,当更新Model以后,允许html的,还是html,而不允许html的,进行了Encode。

当我们把这样的数据记录到数据库,再读出来时(比如编辑页面)

允许html的,和我们输入的一致,而不允许html的,读出来的encode后的,和我们输入的是不一致的。

我们希望在Html.TextBoxFor时,可以再转回来

public class MvcHtmlModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
var meta = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
if (meta.RequestValidationEnabled && meta.ModelType == typeof(string))
{
if (meta.Model != null && !string.IsNullOrEmpty(meta.Model.ToString()))
{
meta.Model = meta.Model.ToString().Replace("&lt;", "<").Replace("&gt;", ">");
}
}
return meta;
}
}

global里

ModelMetadataProviders.Current = new MvcHtmlModelMetadataProvider();
之后,我们使用类似这样的代码
public ActionResult Index()
{
var obj = new TestModel
{
Html = "<script>alert(1)</script>",
Text = "&lt;script>alert(1)&lt;/script&gt;"
};
return View(obj);
}

他显示的结果是转回来的

 

但是,如果你是直接输出

@Model.Text

还是转意过的代码

 

以上代码只为说明,请勿直接用于生产

mvc 提交Html内容的处理的更多相关文章

  1. Mvc 提交表单的4种方法全程详解

    一,MVC  HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...

  2. C# MVC提交表单的四种方式(转)

    Mvc 提交表单的4种方法全程详解(转) 一,MVC  HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttribu ...

  3. Mvc 提交表单的4种方法

     一,MVC  HtmlHelper方法 1.     Html.BeginForm(actionName,controllerName,method,htmlAttributes){} 2.     ...

  4. 【总结-前台发送后台接收表单】MVC提交表单的四种方式

    https://www.cnblogs.com/chenwolong/p/Form.html#commentform 后台控制器接收前台表单参数三种方法: 一.普通参数 HTML标签name 和参数名 ...

  5. Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化

    Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...

  6. git push 报504 (因提交文件内容过大而失败的解决方案)

    Enumerating objects: 60, done. Counting objects: 100% (60/60), done. Delta compression using up to 4 ...

  7. 编写HTML表单提交并接受数据信息(获取用户通过表单提交的内容)

    MyInfoForm.java package com.fxl; import java.io.IOException; import java.io.PrintWriter; import java ...

  8. asp.net mvc 提交model 接收不了

    [HttpPost]        //[ValidateInput(false)]        public ActionResult AddNews1(_54Young_News_Model.m ...

  9. Git 提交修改内容和查看被修改的内容

    我们将仓库里的readme.txt文件修改一下,改成如下内容: Git is a distributed version control systemGit is free software. 运行g ...

随机推荐

  1. [ASP.NET]Net Framework环境问题的一种修复方案

    一.情况介绍 造价软件基于.net framework 4.0开发,要成功运行需要在目标电脑上安装4.0版本以上的framework.一般情况下xp是没有的,win7系列自带3.5,都需要手动安装4. ...

  2. day 77 基于form组件的注册功能

    Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...

  3. Android与js交互

    本文转载自:http://blog.csdn.net/it1039871366/article/details/46372207 一文. Android 中可以通过webview来实现和js的交互,在 ...

  4. nginx 场景业务汇总 (初)

    本文链接:http://www.cnblogs.com/zhenghongxin/p/8891385.html 在下面的测试中,建议每次修改nginx配置文件后,都用此命令检查一下语法是否正确: [r ...

  5. BZOJ 1003--[ZJOI2006]物流运输(最短路)

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 10034  Solved: 4403 Description ...

  6. 前端入门CSS(3)

    day60 不透明度 opacity()\ opacity (不透明度)             1. 取值0~1             2. 和rgba()的区别:                ...

  7. tomcat 项目发布方式

    1.WEB应用的组成结构 开发web应用时,不同类型的文件有严格的存放规则,否则不仅会使web应用无法访问 还会导致web服务器自动报错. mail:web应用所在目录(该目录自定义) html,js ...

  8. ffmpeg开发基础知识

    1.音频采集 面临的问题:延时敏感,噪声消除,回声消除,静音检测 主要参数: 采样率,位宽,声道数,音视频帧 采样率: 也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它 ...

  9. FlowPortal-BPM——功能:判断数据库表中字段是否重复并阻止提交或保存

    一.JS添加代码,判断是否有OnSubmit事件 文件位置:YZSoft/Forms/src/Validator.js //=====判断是否有OnSubmit事件===== if (typeof ( ...

  10. document文档对象

    document 文挡对象 - JavaScript脚本语言描述———————————————————————注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写否则会提示你一 ...