如何在ASP.NET MVC Core 2.2中使用@ Url.Action传递文本框值

时间:2019-05-22 14:38:42

标签: c# asp.net-core-mvc

在我看来,我有以下代码:

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

在这种情况下,我想将文本框(createdDate)内的createdDate值传递给Url.Action(...),因此可以将其作为queryString传递给我的URL。 此操作作为GET请求调用,在GetRoomAccessHistory控制方法中,我应该获取我的createdDate。

谢谢。

PS

我认为解决方案应该是这样的:

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

3 个答案:

答案 0 :(得分:1)

我有一个可能的答案:

<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 :(得分:1)

对于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>

答案 2 :(得分:0)

您使用的工具错误。

由于Url.Action()帮助程序在服务器端运行,因此它在第一次加载页面时已经执行,并生成了固定的URL,该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>

提交后,这将对GetRoomAccessHistory操作的URL生成GET请求,并使用文本框中的值将createdDate作为查询字符串变量附加。