使用javascript参数向MVC5控制器传递特殊字符

使用javascript参数向MVC5控制器传递特殊字符,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我试图允许用户在MVC应用程序中编辑名称 控制器功能具有以下签名: [Route("function/edit/{id:int}/{name}/{sortorder:int}")] public ActionResult Edit(int id, string name, int sortorder) {...} 我用Javascript这样称呼它: window.location.href = "@Url.Action("Edit", "Function")" + "/" + id + "/

我试图允许用户在MVC应用程序中编辑名称

控制器功能具有以下签名:

[Route("function/edit/{id:int}/{name}/{sortorder:int}")]
public ActionResult Edit(int id, string name, int sortorder)
{...}
我用Javascript这样称呼它:

window.location.href = "@Url.Action("Edit", "Function")" + "/" + id + "/" + name + "/" + order;
这一切都可以正常工作,直到名称包含“/”或名称以“.”结尾,然后我从服务器上得到一个“资源找不到”。 这很有道理,因为“/”和“.”字符正确地混淆了路由


但是我该怎么做呢??我想在名称中允许“/”和“.”

您需要对数据进行编码,以便正确传递
/
等字符。为此,您应使用以下功能:

window.location.href = 
    "@Url.Action("Edit", "Function")" + "/" + id + "/" + 
        encodeURIComponent(name) + "/" + order;
例如,这是编码前后的差异:

var test=“this.is/a test”;
警报(测试);

警报(组件(测试))我已经尝试了编码组件和转义。他们中没有人对“.”做任何事,或者“/”encodeURIComponent(name)对“.”或“/”@JakobOlsen是的,请查看链接,其中明确说明它对
/
和我用示例进行的编辑进行了编码。我的坏。。。事实上,它对“/”进行编码。但这并不能解决问题。我仍然会收到“找不到资源”错误,即使/encoded@JakobOlsen所以你确实需要编码,但我也为一个MVC特定的问题做了编辑。很好的建议,但仍然不起作用。我认为问题可能是,url在路由看到它之前就被解码了。如果我希望名称为“allan/bert”,那么mvc路由将看到url“function/edit/1/2/allan/bert”,即使它在接收时是url编码的。