Передача параметров даты в @url.action через ajax

В моем приложении ASP.NET MVC 4 я использую следующий код JAX, взятый из этого сообщение StackOverflow для передачи параметров даты контроллеру, но я получаю следующую ошибку http 404: "Искомый ресурс был удален, его имя было изменено или временно недоступен. Запрошенный URL /myWebApp/myController/myAction/01/01/2014/31/12/2014"

Здесь элементы управления вводом txtFrom и txtTo имеют значения 01.01.2014 и 31.12.2014 соответственно. проблема в том, что MVC, вероятно, интерпретирует каждую дату как три разных параметра. Как мы можем это исправить. Я попытался заменить $('#txtFrom').val() на $('#txtFrom').val().replace("///g", "_"), но это не работает.

window.location.href = '@Url.Action("myAction")/' + $('#txtFrom').val() + '/' + $('#txtTo').val();

Метод действия:

public ActionResult myAction(string startDate, string endDate)
{
 //simple code here to use the input parameters
}

person nam    schedule 24.03.2014    source источник


Ответы (2)


Вы можете отформатировать строку даты с помощью Razor

@HttpUtility.UrlEncode(date)

с javascript

encodeURIComponent(date)

или передать дату в виде тиков (миллисекунд с начала эпохи) вместо удобочитаемого формата.

Изменить:

После экспериментов с этим и небольшого исследования кажется, что кодировка косой черты и %2f вызывает всевозможные проблемы. Придерживайтесь миллисекундного представления даты и не беспокойтесь о передаче косой черты.

person Jasen    schedule 24.03.2014
comment
по вашему совету я попробовал @HttpUtility.UrlEncode(date) и с помощью инструмента разработчика Chrome я заметил, что формирование URL-адреса правильно отображается как: /myWebApp/myController/myAction/01%2F01%2F2014/12%2F31%2F2014. Но я все еще получаю ту же ошибку: ресурс не найден Запрошенный URL-адрес /myWebApp/myController/myAction/01/01/2014/12/31/2014 - person nam; 25.03.2014
comment
Попробуйте как /myAction?startDate=x&endDate=x. Если это сработает, возможно, проблема в ваших правилах маршрутизации. Галочки могут быть самым безопасным вариантом, поскольку они не будут содержать никаких специальных символов. - person Jasen; 25.03.2014
comment
/myAction?startDate=x&endDate=x работал. Но тогда что может быть проблемой с правилами маршрутизации, из-за которой /myAction/startDate/endDate не работает? - person nam; 26.03.2014
comment
%2f преобразуется обратно в косую черту перед выполнением маршрутизации. Есть разные способы обойти эту проблему, например, заменить / другим символом. Вы можете сделать это в настройках IIS, но все это кажется более трудоемким, чем оно того стоит, когда вы можете просто передать галочки как /myAction/xxx/xxx. В качестве альтернативы вы можете отформатировать дату как mmddyyyy, и это будет более читабельно, чем тики. Также обратите внимание, что mm/dd/yyyy можно легко принять за dd/mm/yyyy, и миллисекундное представление позволяет избежать этого случая. - person Jasen; 26.03.2014

window.location.href не является ajax. Ваш браузер делает HTTP-запрос на получение URL-адреса. В вашем случае это не полный URL, а частичный; таким образом ошибка. Вы можете попробовать следующее для начала. Замените жестко закодированные значения дат своими входными данными.

$.getJSON({‘@Url.Action("myAction")’ + '/', { startDate: ‘1/1/2001’, endData: ‘1/2/2002’ }});

Если вы хотите обработать любое возвращаемое значение; обратитесь к документации jquery по $.getJSON (http://api.jquery.com/jquery.getjson/< /а>)

person Chintana Meegamarachchi    schedule 25.03.2014