我刚刚启动了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);
}
到目前为止,我已经使用了带有强类型视图的脚手架,所以对我来说一切都很紧密。
我的观点会是什么样的?我会使用actionlink(毕竟这是一个get请求,对吗?)而不是提交按钮。
感谢。
答案 0 :(得分:3)
我想了一会儿,然后才想出答案。最初扔给我的是将单个文本输入字符串转换为月,日和年组件的概念。在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”是您要回发的控制器的名称。当然,“索引”是您要发布的方法。我现在坚持使用提交按钮,除非你试图在页面上获得一个LinkButton等价物。但是你可以在功能之后保存“漂亮”部分,对吗?
编辑:为答案添加了视图代码。
答案 1 :(得分:0)
编辑:
最简单的方法是将搜索输入页面发布(不是get)回到其他方法,解析日期,然后重定向到您指定的Action。
如果你想通过get来做,那么你可以使用一些Javascript trickeration链接到他们输入的内容,但我推荐前者。