我正在构建一个C#MVC站点,我可以在其中保存代码片段。我使用textarea粘贴我的代码。当我尝试保存某些字符时失败。我正在使用jqueryUI。
这是将我的textarea保存到数据库的函数,其中snippetAdd是我的textarea的ID:
function addSnippet() {
$("#newSnippet").show();
var myStuff = { snippetCode: $('#snippetAdd').val(), lexiconId: $('#lexiconId').val(), snippetDesc: $('#snippetDescAdd').val() };
var aURL = "/Lexicon/addSnippet";
$.post(aURL, myStuff, function(data) { parseMessage(data); }, 'json');
}
例如,如果我过去并尝试保存以下内容,而没有单引号则失败:
'<'some code'>'
谢谢!
答案 0 :(得分:0)
我认为问题源于您没有对输入进行编码。 (你没有详细说明错误,所以这是最好的猜测。)无论如何,尝试用你所有的输入做这个:
encodeURI($('#snippetAdd').val())
这将对您的字符串进行HTML编码,将特殊字符替换为其编码的等效字符。您当然必须在服务器端解码您的字符串以重新构建在该字段中输入的原始代码。
答案 1 :(得分:0)
@LeviBotelho有正确的方法。但是,您还可以通过注释控制器来告诉MVC不要验证传入数据:
[HttpPost, ValidateInput(false)]
public ActionResult Index(MyModel model)
{...}
注意:这不是最安全的方法,因为它会使您的服务器对潜在的脚本注入攻击开放。如果您信任您的用户并在服务器端立即执行编码,则应该使用它。