Я пытаюсь получить два параметра строки запроса из JavaScript в контроллер. Вот код:
var startDate = "",
enddate = "";
var startDate = $.datepicker.formatDate(dateFormat, $("#startDate").datepicker('getDate'));
var enddate = $.datepicker.formatDate(dateFormat, $("#endDate").datepicker('getDate'));
if (startDate != "" || enddate != "") {
window.location = `${window.location.href}/Index?startDate=${startDate}&endDate=${enddate}`;
}
public IActionResult Index([FromQuery(Name = "startDate")] string startDate = "", [FromQuery(Name = "endDate")] string endDate = "")
{
}
Контроллер вызывается, и первым параметром является fin, но второй параметр получает испорченную версию URL-адреса. Вот картинка. Мне трудно понять, что я делаю неправильно.
Значения JavaScript
Значения C#
Каково значение window.location.href в JavaScript?
Обновлено с изображениями
Двойное отклонение было опечаткой, когда я построил вопрос здесь о stackoverflow ...
Я меняю имена параметров, поэтому и в JavaScript, и в C# параметры называются "startDate" и "endDate".



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Из того, что вы опубликовали, кажется вероятным, что проблема в windows.location.href, и вы объединяете значения, которые уже существуют в URL-адресе. Например, если ваш href был
http://www.somesite/Index?startDate=1&endate=2
Тогда ваша объединенная строка будет:
http://www.somesite/Index?startDate=1&endate=2/Index?startDate=1&endDate=2
и ваши значения будут такими:
startDate: 1
endDate: 2/Index/startDate=1
Чтобы решить эту проблему, вы можете попробовать использовать window.location.hostname вместо href.
Обновлять
Я думаю, вы должны сделать URL относительным:
window.location = `/Index?startDate=${startDate}&endDate=${enddate}`;
хм .. Я понимаю, что вы имеете в виду, и это, вероятно, проблема. Как вы посоветуете мне использовать .hostname?
Если у вас {window.location.href}/Index... замените его на {window.location.hostname}/Index...
Чтобы быть предельно ясным, вы имеете в виду вот такой window.location.href = ${window.location.hostname}/Index/?startDate=${startDate}&endDate=${endDate};
Да, кроме window.location = в начале.
В приведенном выше коде указан URL-адрес http://localhost:55817/localhost/Index/?startDate=2018-07-10&endDate=2018-07-29, скажите мне, что вам нужно, и я его получу.
Пробовал. Он дает URL-адрес, который я написал выше в комментариях. Браузер не может найти ресурс
Попробовал и получил этот URL: http://localhost:55817/Index?startDate=2018-07-09&endDate=2018-07-29 Проблема в том, что у меня есть несколько контроллеров, у всех есть файлы index.cshtml в папке просмотра. Таким образом, MVC не знает, к какому индексу перейти.
Будет ли этот код использоваться более чем на одной странице, если не просто жесткий код в имени контроллера перед индексом, если это так, вам придется извлечь имя контроллера из URL-адреса.
Решил это. Но я все еще немного смущен, какое решение ниже мне следует использовать. Есть ли у вас какие-либо идеи?
Я решил это, удалив "индекс" в URL-адресе. Платформа MVC автоматически ищет «индексный» ActionResult, если Action отсутствует в URL-адресе.
window.location = `Salaries?startDate=${startDate}&endDate=${endDate}`;
он также работает так:
window.location = `?startDate=${startDate}&endDate=${endDate}`;
Каковы значения
startDateиendDateв javascript? Кроме того, почему вы дважды объявляете переменные в JS? Кроме того, достаточно использовать только[FromQuery].