将值传递给控制器

时间:2018-05-20 13:09:19

标签: c# html asp.net-mvc

在我的控制器中我有IActionResult,需要3个字符串

public IActionResult DeviceDetails(string idDetails, string begindate, string enddate)
{....}

我喜欢在网页上传递这些字符串,用户可以从datepicker中选择开始和结束日期,所以我有:

<input id="begindate" type="date" class="btn btn-default"/>
<input id="enddate" type="date" class="btn btn-default" />
<button type="submit" value="show data" class="btn btn-default">@Html.ActionLink("Show data", "DeviceDetails", new { idDetails = ViewBag.DeviceName, begindate ="begindate", enddate = "enddate" }) </button>

如何将值从id="begindate"id="enddate"传递到Html.ActionLink(idDetails正常工作)?
或者,我如何以不同的方式将这两个字符串传递给控制器​​?

2 个答案:

答案 0 :(得分:1)

试试这个:

ActionLink(默认):

useSSL=false


ActionLink(使用按钮):

@Html.ActionLink("YourAction", "YourController", new { id = item.ID }) 

<button onclick="location.href='@Url.Action("YourAction", "YourController",
    new { Model.ProductID })';return false;">Details</button>

希望这会有所帮助......

答案 1 :(得分:1)

您可以使用ActionLink中的临时占位符值生成routeValues并将ID添加到锚元素:

<button type="submit" value="show data" class="btn btn-default">@Html.ActionLink("Show data", "DeviceDetails", new { idDetails = ViewBag.DeviceName, begindate = "xxxx", enddate = "yyyy" }, new { id = "showdata" })</button>

然后,使用普通的JS / jQuery来处理click客户端事件,它将临时占位符值替换为日期输入的实际值(下面是使用jQuery):

$('#showdata').click(function(e) {
    var beginDate = $('#begindate').val();
    var endDate = $('#enddate').val();
    var tempValue = $(this).prop('href');
    var realValue = tempValue.replace("xxxx", beginDate)
                             .replace("yyyy", endDate);
    location.href = realValue; // redirect
    return false; // cancel default redirect
});

作为旁注,最好使用强类型的视图模型,并使用viewmodel属性将输入值传递给控制器​​操作方法,而不是构建大量的查询字符串。

实例:DotNET Fiddle