在jquery发布ASP.NET MVC之前转义字符的最佳方法

时间:2010-02-19 16:40:35

标签: javascript asp.net-mvc model-view-controller

我是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'。

显然这是一个可怕的黑客,所以我必须遗漏一些东西。任何帮助将不胜感激。

5 个答案:

答案 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。

Javascript encoding

然后在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而不是字符串。这也可能是你的数据库的更好性能。