我是ASP.NET MVC的半新手。我正在构建一个内部用于我公司的应用程序。
场景是这样的:有两个Html.Listbox。一个包含所有数据库信息,另一个最初为空。用户将数据库列表框中的项添加到空列表框中。
每次用户添加命令时,我都会在我的EditController中调用一个调用ActionResult“AddCommand”的js函数。在控制器中,添加的选定项目将保存到另一个数据库表中。
以下是代码(每次添加项目时都会调用此代码):
function Add(listbox){ ...
//跳过为berevity初始化代码var url =“/ Edit / AddCommand /”+ cmd;
$交(URL);
}
因此,当'cmd'是具有'/',':','%','?'等(某种特殊字符)的项目时会出现问题
所以我想知道的是,逃脱这些角色的最佳方法是什么?现在我正在检查数据库的列表框项目的文本,并重建字符串,然后在Controller中,我正在使用该构建的字符串并将其恢复到原始状态。
例如,如果他们添加的项目是“猫/狗”,我将'Cats [SLASH] Dogs'发布到控制器,并在控制器中将其更改回'Cats / Dogs'。
显然这是一个可怕的黑客,所以我必须遗漏一些东西。任何帮助将不胜感激。
答案 0 :(得分:4)
为什么不从URI中取出它?你正在做POST
,所以把它放在表格中。
如果你的行动是:
public ActionResult AddCommand(string cmd) { // ...
...然后你可以这样做:
var url = "/Edit/AddCommand";
var data = { cmd: cmd };
$.post(url, data);
......一切都“正常”,没有单独的编码步骤。
答案 1 :(得分:3)
在发送数据之前,您是否尝试过使用'escape'功能?这样,所有特殊字符都以安全字符编码。在服务器端,您可以解码该值。
function Add(listbox) { ...
//skipping initializing code for berevity
var url = "/Edit/AddCommand/" + escape(cmd);
$.post(url);
}
答案 2 :(得分:0)
使用javascript转义,它会进行urlencoding。
然后在C#中你可以简单地解码它。
看起来像这样
function Add(listbox) { ...
//skipping initializing code for berevity
var url = "/Edit/AddCommand/" + escape(cmd);
$.post(url);
}
答案 3 :(得分:0)
您是否尝试将cmd变量包装在对escape()的调用中?
答案 4 :(得分:0)
您可以将详细信息作为查询字符串传递。目前我猜测你的动作如下:
public virtual ActionResult AddCommand( string id )
您可以将其更改为:
public virtual ActionResult AddCommand( string cmd )
然后在你的javascript调用:
var url = "/Edit/AddCommand?cmd=" + cmd;
这样您就不必担心编码了。
更好的方法是,如果您可以传递数据库项ID而不是字符串。这也可能是你的数据库的更好性能。