Как передать значение текстового поля с помощью @ Url.Action в ASP.NET MVC Core 2.2 - PullRequest
0 голосов
/ 22 мая 2019

На мой взгляд, у меня есть следующий код:

<input type="text" id="createdDate" placeholder="dd/mm/yyyy" />
<a href="@Url.Action("GetRoomAccessHistory")">Download</a>

В моем контроле у ​​меня есть следующий код:

[HttpGet]
public async Task<IActionResult> GetRoomAccessHistory(DateTime createdDate)
{ 
    // TO DO
}

В этом конкретном случае я хочу передать значение createDate, которое находится внутри текстового поля (creationDate), в мой Url.Action (...), чтобы его можно было передать как queryString в моем URL. Это действие вызывается как запрос GET, и в методе управления GetRoomAccessHistory я должен получить свой createDate.

Спасибо.

PS

Я думаю, что решение должно быть примерно таким:

<a href="@Url.Action("GetRoomAccessHistory", "Files", new { createdDate = ??? })" >Download</a>

Ответы [ 3 ]

1 голос
/ 22 мая 2019

У меня есть возможный ответ:

<form method="post" enctype="multipart/form-data" asp-action="GetRoomAccessHistory" id="formGetRoomAccessHistory">
    ...
    <button type="button" id="downloadRoomAccessHistory"</button>
</form>

<script>
    var form = document.getElementById("formGetRoomAccessHistory");

    document.getElementById("downloadRoomAccessHistory").addEventListener("click", function () {
        form.submit();
    });
</script>

Это именно то, что я хочу, и это работает, но я пытался найти более хорошее решение, потому что мой опыт работы с ASP.NET MVC низкий.

1 голос
/ 23 мая 2019

Для запроса Get попробуйте использовать window.location.href.

 <input type = "text" id="createdDate" placeholder="dd/mm/yyyy" />
<a onclick = "navigate()" >
    < input type="button" value='Download' />
</a>

<script type = 'text/javascript' >
    function navigate()
    {
        var createdDate = document.getElementById('createdDate').value;
        var url = "/Files/GetRoomAccessHistory?createdDate=" + createdDate;
        window.location.href = url;
    }
</script>

И ваше решение может быть упрощено до

<form method = "get" asp-controller="Files" asp-action="GetRoomAccessHistory" id="formGetRoomAccessHistory">
    <input type = "text" name="createdDate" placeholder="dd/mm/yyyy" />
    <button type = "button" onclick="myFunction()">Download</button>
</form>

<script>
    function myFunction()
    {
        document.getElementById("formGetRoomAccessHistory").submit();
    }
</script>
0 голосов
/ 22 мая 2019

Вы используете не тот инструмент для работы.

Поскольку помощник Url.Action() работает на стороне сервера, он уже был выполнен при первой загрузке страницы и сгенерировал фиксированный URL-адрес, который вставляется в HTML-код страницы. Он не может знать, что пользователь вводит позже в текстовое поле.

Если вы хотите захватить данные, введенные пользователем, имеет смысл использовать форму. В этом случае я использовал помощник тега BeginForm , чтобы сгенерировать подходящий тег HTML <form>:

<form asp-action="GetRoomAccessHistory" asp-controller="Files" method="get">      
  <input type="text" id="createdDate" name="createdDate" placeholder="dd/mm/yyyy" />
  <input type="submit" value="Download"/>
</form>

При отправке сгенерирует запрос GET к URL-адресу действия GetRoomAccessHistory и добавит createdDate в качестве переменной строки запроса, используя значение из текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...