Мне нужно передать строку url из представления в контроллер, URL-адрес, который получен с помощью jquery. Я попытался просто использовать параметр id в маршрутизации по умолчанию, но это не сработало. Он не принял строку URL.
Вызов контроллера через 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, я не вижу, как добавление этого маршрута должно иметь какое-то значение ...
Если бы кто-то мог просветить меня, я был бы очень благодарен!
EDIT:
Когда я думаю об этом, так как я получаю контент через ajax-вызов с jquery, я не уверен, что решение типа ViewData все равно будет работать, потому что вся страница не опубликована, или я ошибаюсь? Имейте в виду, что на данный момент я только изучаю MVC и jquery, поэтому, пожалуйста, не думайте, что у меня еще есть все основы, понятные мне :-). По сути, я просто хочу иметь возможность передавать любой тип строки (и, возможно, другие типы данных, которые не являются идентификаторами) в контроллер из представления ...
РЕДАКТИРОВАТЬ 2:
Я попробовал предложенный encodeURIComponent, но это тоже не сработало, если я что-то не так делаю. Вот мой код:
URL-адрес (не имеет значения, пробую ли я его как относительный или абсолютный, используя file: ///)
<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);
});
});
Я вызываю метод действия с параметром идентификатора строки. Еще раз обратите внимание, что он работает нормально, если я передаю простую строку и выполняется вызов действия. Но если я использую URL выше, метод действия никогда даже не вызывается ... У меня есть точка останова, которая никогда не достигается, если в параметре есть URL!