我需要从视图传递一个url字符串到控制器,这是一个通过jquery获取的url。我尝试在默认路由中使用id参数,但那不起作用。它不接受一个url字符串。通过MVC 2中的jquery从视图传递参数到控制器
通过调用jQuery的控制器正常工作,是这样的:
$('#result').load('Home/Files/' + url);
这就需要正确的操作方法,但除非我喂一个简单的文本字符串,它不会工作(我测试喂养URL变量简单的字符串只是为了确保方法被调用)。
那么我怎样才能得到这个url字符串到控制器?我正在考虑如何做到这一点“MVC”的方式,而不是打破这种思维方式,所以我不想在runat服务器上使用隐藏的输入。它可以通过ViewData完成吗?我想不出任何方式,我只知道如何在控制器中设置ViewData并从视图中获取值,而不是反过来......
我也尝试添加一个自定义路由默认路由):
routes.MapRoute(
"FileManager", // Route name
"Home/{action}/{url}", // URL with parameters
new { controller = "Home", action = "Files", url = "" } // Parameter defaults
);
但是,这也没有工作,同样的问题没有得到的URL到控制器。我只是这么做的,因为我曾在这里看到过类似问题的人的建议,但说实话,我不明白这是如何工作的,因为这与默认路线有什么不同?我不知道为什么{id}参数似乎只接受某些字符串(id格式字符串,我想),但除非我能指定什么类型的url参数应该是我不明白如何添加此路线应该有任何区别...
如果有人能够启发我,我将非常感激!
编辑︰ 当我想到它,因为我通过与jQuery的ajax调用获取内容,我不知道一个ViewData类型的解决方案无论如何将工作,因为整个页面不张贴,或我错了吗?请记住,我现在只是在学习MVC和jQuery,所以请不要假设我已经掌握了所有的基础知识:-)。基本上,我只希望能够通过任何类型的字符串(和可能的其它类型的数据,是不是一个id)来从视图中的控制器...
编辑2: 我尝试了建议encodeURIComponent方法,但那也没用,除非我做错了什么。这里是我的代码:
的网址(如果我尝试它作为一个相对路径或使用文件的绝对一个也无所谓:///)
<li><a href="#" rel="visual studio 2010/Projects/JsTree/JsTree/">Some text</a>
jQuery的:
var url;
$(document).ready(function() {
$("a").click(function() {
url = encodeURIComponent($(this).attr("rel"));
$('#result').load('Home/Files/' + url);
});
});
我使用字符串id参数调用操作方法。请再次注意,如果我传递一个简单的字符串,并且对该操作进行调用,则它工作正常。但是,如果我使用上面的URL,操作方法甚至永远不会被调用......我有一个断点,如果参数中存在url,永远不会到达该断点!
与上述Nick相同的评论:我真正要问的是,你将如何能够传递其他类型的字符串,不仅是url,还有字符串,包含空格,系统文件路径,你有什么...? – Anders 2010-08-17 07:17:26
完全相同的机制。名称中引用的URI指的是它在URL中传递的方式_NOT_,它是一个正在编码的URL - 因此可以用这种方式对任何数据进行编码。对此的通用JavaScript方法是escape(),但doens不能很好地处理unicode。请参阅http://xkr.us/articles/javascript/encode-compare/以获得更多信息 – Basic 2010-08-17 13:45:02
你最终会得到如下结果: .load('Home/Files /'+ encodeURIComponent(url)+ '/'+ encodeURIComponent(SomeOtherParameter)); –
Basic
2010-08-17 13:46:58