本人各种菜鸟,捣鼓了好一会没弄出来。求指教ASP.NET MVC框架
<script type="text/javascript"> function Send() { var str = "date='" + getContent()+"'"; alert(str); $.ajax({ type: "POST", url: "/Blogs/SaveBlog/", //这里不是some.php?date="+str data: str, datatype:Text, success: function (msg) { alert("Data Saved: " + msg); } }); } </script>
后台:
[HttpPost] public void SaveBlog(string data) { string dd = Request.Form["data"]; int i = 0; }
怎么AJAX把长字符串文本发送到后台。JS应该怎么写,后台怎么接收的。参数的方法不行了呀
前台
刚才看错了,修改下。
MVC 为了防止 HTML 注入攻击,会对传入 Action 的字符串参数进行检查,如果包含 HTML 代码,就会进行阻止。
MVC 4 可在 Action 上加上 [ValidateInput(false)] 允许当前 Action 接收 HTML 字符串:
[HttpPost] [ValidateInput(false)] public ActionResult SaveBlog(string data) { //... }
之前版本的 MVC 处理可能略有不同。
另外,你脚本中有处错误:
var str = "date='" + getContent()+"'";
高亮部分应该是 data,可能是不小心写错的吧。
脚本还是建议你写成如下:
$.ajax({ type: "POST", url: "/Home/SaveBlog/", data: { data: getContent() }, success: function (msg) { alert("Data Saved: " + msg); } });
不是要JSON数据哦,是一个很长的文本,这个文本还包括了HTML标签
@大芝麻: 不好意思,刚才看错了,我修改了下回复,再看下吧。
@大芝麻: 问题就在于你你传回后台的字符串中包含 HTML 标签。你使用的是 MVC 几?
@鹤冲天: 3.5
@大芝麻: 不是 .net 的版本,是 MVC 的版本,查看下你引用的 System.Web.Mvc.dll 的版本。如果是 4.0 或以上版本,Action 上加上 [ValidateInput(false)] 即可。
@鹤冲天: 可以了,膜拜啊大侠,确实那里data写错了 [ValidateInput(false)]这个也没加,还有加上二楼的那个函数也安全点。祝新年心想事成!
需要URL编码一下或者关闭ASP的防JS注入,默认是屏蔽 <等HTML符号的
大侠能详细点么,我菜鸟
@大芝麻: encodeURIComponent()将数据编码后发送
@56180825: 恩恩 后台不用参数的话用Request.Form要经过这个函数处理才取的到,谢谢