Не удалось получить данные строки запроса

Я пытаюсь получить два параметра строки запроса из JavaScript в контроллер. Вот код:

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}`;

}

C#

public IActionResult Index([FromQuery(Name = "startDate")] string startDate = "", [FromQuery(Name = "endDate")] string endDate = "") 
{    
}

Контроллер вызывается, и первым параметром является fin, но второй параметр получает испорченную версию URL-адреса. Вот картинка. Мне трудно понять, что я делаю неправильно.

Значения JavaScript

Не удалось получить данные строки запроса

Значения C#

Не удалось получить данные строки запроса

Каковы значения startDate и endDate в javascript? Кроме того, почему вы дважды объявляете переменные в JS? Кроме того, достаточно использовать только [FromQuery].

Camilo Terevinto 23.07.2018 16:16

Каково значение window.location.href в JavaScript?

Code-Apprentice 23.07.2018 16:17

Обновлено с изображениями

AllramEst 23.07.2018 16:22

Двойное отклонение было опечаткой, когда я построил вопрос здесь о stackoverflow ...

AllramEst 23.07.2018 16:23

Я меняю имена параметров, поэтому и в JavaScript, и в C# параметры называются "startDate" и "endDate".

AllramEst 23.07.2018 16:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
93
2

Ответы 2

Из того, что вы опубликовали, кажется вероятным, что проблема в 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?

AllramEst 23.07.2018 16:35

Если у вас {window.location.href}/Index... замените его на {window.location.hostname}/Index...

SBFrancies 23.07.2018 16:37

Чтобы быть предельно ясным, вы имеете в виду вот такой window.location.href = ${window.location.hostname}/Index/?startDate=${startDate}&en‌​dDate=${endDate};

AllramEst 23.07.2018 16:41

Да, кроме window.location = в начале.

SBFrancies 23.07.2018 16:43

В приведенном выше коде указан URL-адрес http://localhost:55817/localhost/Index/?startDate=2018-07-10‌​&endDate=2018-07-29, скажите мне, что вам нужно, и я его получу.

AllramEst 23.07.2018 16:43

Пробовал. Он дает URL-адрес, который я написал выше в комментариях. Браузер не может найти ресурс

AllramEst 23.07.2018 16:46

Попробовал и получил этот URL: http://localhost:55817/Index?startDate=2018-07-09&endDate=20‌​18-07-29 Проблема в том, что у меня есть несколько контроллеров, у всех есть файлы index.cshtml в папке просмотра. Таким образом, MVC не знает, к какому индексу перейти.

AllramEst 23.07.2018 16:54

Будет ли этот код использоваться более чем на одной странице, если не просто жесткий код в имени контроллера перед индексом, если это так, вам придется извлечь имя контроллера из URL-адреса.

SBFrancies 23.07.2018 16:56

Решил это. Но я все еще немного смущен, какое решение ниже мне следует использовать. Есть ли у вас какие-либо идеи?

AllramEst 24.07.2018 08:04

Я решил это, удалив "индекс" в URL-адресе. Платформа MVC автоматически ищет «индексный» ActionResult, если Action отсутствует в URL-адресе.

window.location = `Salaries?startDate=${startDate}&endDate=${endDate}`;

он также работает так:

window.location = `?startDate=${startDate}&endDate=${endDate}`;

Другие вопросы по теме