如何使用Html.ActionLink将文本框(DatePicker)变量传递给我的控制器?

问题描述:

我有一个链接,可在不离开页面的情况下在新窗口中打开pdf。我有这个环节的工作...如何使用Html.ActionLink将文本框(DatePicker)变量传递给我的控制器?

<script type="text/javascript"> 
$(function() { 

    $("#DatePicker").mask("99/99/9999").datepicker({ maxDate: new Date() }); 
}); 
if (document.images) { 
    var pic1 = new Image(100, 200); 
    pic1.src = '<%=Url.Content("~/images/calendarContent.png") %>' 
} 
</script> 

<%= Html.ActionLink("Click ME", "Controller", "Home", new { id = Model.id }, new { onclick = "stayHomeFunc()"})%></div> 

的评论后,我要补充一个datepicker功能,允许用户选择一个日期。我如何才能将该日期选择传递给我的控制器?这是我到目前为止,它的方式返回一个空的startDate ...

Enter Date:<input name="DatePicker" id="DatePicker" type="text" style="width: 80px" /> 
<%= Html.ActionLink("Click ME", "Controller", "Home", new { id = Model.id, startDate = DatePicker }, new { onclick = "stayHomeFunc()"})%></div> 


public ActionResult COntroller(string id, string startDate){...} 

任何想法?在此先感谢...

+0

选择你不张贴形式的日期后,因此没有在所有发送到服务器(控制器)的数据。但您可以发布所选内容,可以使用$ .get(...)并使用所选的新日期更新控制器,并从控制器填充startDate = DatePicker。 – tkt986

你有2种可能:

  1. 使用包含#DatePicker领域的表单内提交按钮。这样,你不需要通过任何东西,当提交表单所有输入值将被自动发送到服务器:

    @using (Html.BeginForm("SomeAction", "Home")) 
    { 
        @Html.TextBoxFor(x => x.DatePicker) 
        <input type="submit" value="Click Me" /> 
    } 
    
  2. ,如果你想使用一个锚,您将需要以使用JavaScript将datepicker的值附加到查询字符串。所以,你的stayHomeFunc功能,触发链接被点击里面的时候:

    function stayHomeFunc(link) { 
        var date = $('#DatePicker').datepicker('getDate'); 
        var formattedDate = $.datepicker.formatDate('yy-mm-dd', date); 
        link.href += '?DatePicker=' + formattedDate; 
    } 
    

    ,然后别忘了锚实例传递给onclick事件:

    <%= Html.ActionLink(
        "Click ME", 
        "SomeAction", 
        "Home", 
        new { id = Model.id }, 
        new { onclick = "stayHomeFunc(this)"} 
    ) %> 
    

我个人与第一个选项一起去,因为它在语义上更加正确,并且不需要任何JavaScript。

还要注意模型联编程序使用的DateTime格式以及GET和POST请求之间存在的差异。欲了解更多信息,请参阅following article

+0

这实际上是我在找的东西。非常感谢Dimitrov! – MrM

您也可以使用FormCollection。

VIEW

@using (Html.BeginForm("SomeAction", "Home")) 
{ 

<input type="text" id="DatePicker" name="date"> 
} 

控制器

public ActionResult SomeAction(FormCollection form) 
    { 
    var date = form["date"]; 

       if (date != String.Empty) 
       { 
        MyModel model = new MyModel(); 
        model.date= DateTime.Parse(date); 
       } 
     return RedirectToAction("YourNewAction", new {date = model.date}); 

    }