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

时间:2012-09-21 12:13:56

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

我有一个链接可以在新窗口中打开pdf,而不会离开页面。我有这个链接工作......

<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函数,允许用户选择日期。如何将该日期选择传递给我的控制器?这是我到目前为止,它返回一个null 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){...}

有什么想法吗?提前谢谢......

2 个答案:

答案 0 :(得分:0)

您有两种可能性:

  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)"}
    ) %>
    
  3. 我个人会选择第一个选项,因为它在语义上更正确,不需要任何javascript。

    还要注意模型绑定器使用的DateTime格式以及GET和POST请求之间存在的差异。有关更多信息,请参阅following article

答案 1 :(得分:-1)

您也可以使用FormCollection。

查看

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

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

CONTROLLER

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

    }