【问题标题】:ASP.NET MVC 2 - Simple Search PageASP.NET MVC 2 - 简单搜索页面
【发布时间】:2011-03-28 00:01:30
【问题描述】:

我刚开始使用 ASP.NET MVC(来自 WebForms),我正在为一些非常基本的概念而苦苦挣扎。

我想创建一个使用文本框输入日期的单个页面。我希望将日期输入传递给我的控制器的索引,如下所示:

  public ActionResult Index(int month,
                              int day,
                              int year){

        var visitors = visitorRepoistory.FindVisitorsByDate(month, day, year).ToList();

        return View("Index", visitors);
    }

到目前为止,我一直在使用带有强类型视图的脚手架,所以对我来说一切都粘在一起了。

我的视图会/应该是什么样子?我会使用操作链接(毕竟这是一个获取请求,对吗?)而不是提交按钮。

谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc-2


    【解决方案1】:

    我想了一会儿才想出一个答案。最初让我印象深刻的是将单个文本输入字符串转换为月、日和年组件的概念。在 ASP.NET MVC 中,只接受日期字符串会容易得多。这样,您的代码将更改为:

    public ActionResult Index(string date) {
       try
       {
          DateTime dtDate = DateTime.Parse(date);
          var visitors = visitorRepoistory.FindVisitorsByDate(dtDate.month, 
                         dtDate.day, dtDate.year).ToList();
    
          return View("Index", visitors);
       }
       catch (FormatException)
       {
         //String was not a valid date/time
       }
    }
    

    有没有办法把它分成 3 个整数?我确定。但对我来说,这将是实现目标的最简单/最快的方法。

    所以在视图中,你的表单看起来像这样:

    <% using(Html.BeginForm("VisitorSearchController", "Index")) { %>
    Enter a date: <%= Html.TextBox("date") %>
    <input type='submit' value='Search' />
    <% } %>
    

    其中“VisitorSearchController”是您要回发到的控制器的名称。当然,“索引”是您发布的方法。除非您尝试在页面上获取等效的 LinkBut​​ton,否则我现在会坚持使用提交按钮。但是你可以在功能之后保存“美化”部分,对吧?

    编辑:在答案中添加了查看代码。

    【讨论】:

    • 谢谢,您能再进入视图部分吗?将我的视图连接到控制器是让我绊倒的原因。我不知道从哪里开始。
    • 不客气。我已将视图代码添加到原始答案中。
    【解决方案2】:

    编辑评论后:

    最简单的方法是让搜索输入页面post(而不是get)返回到其他方法,解析出日期,然后重定向到您指定的Action。

    如果你想通过 get 来完成,那么你可以使用一些 Javascript 欺骗来链接到他们输入的任何内容,但我推荐前者。

    【讨论】:

    • 您可以使用method属性创建一个执行get请求的表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多