【发布时间】:2016-04-27 22:41:58
【问题描述】:
我将在下面发布我的视图和控制器。
我想知道是否有更好的方法来做到这一点,所以我不需要重复 相同的代码 4 次,因为我的控制器和更好的实践是相当多的将是使其更可重用,而不是重复和更改微小的部分。
它的工作原理如下:用户从FirstName、Email 或PostCode 中选择一个选项,然后可以选择一个时间范围,如下所示。为每个人做这个将是一个简单的复制/粘贴和更改,但如果可能的话,我想使用更少的代码。
这是我的控制器声明:
//if a user choose the radio button option as FirstName
if (option == "FirstName")
{
if (date == "day")
{
DateTime today = DateTime.Now.AddDays(-1);
return View(db.Orders.Where(x => x.FirstName.StartsWith(search) && x.OrderDate >= today || search == null).ToList());
}
if (date == "week")
{
DateTime today = DateTime.Now.AddDays(-7);
return View(db.Orders.Where(x => x.FirstName.StartsWith(search) && x.OrderDate >= today || search == null).ToList());
}
if (date == "month")
{
DateTime today = DateTime.Now.AddMonths(-1);
return View(db.Orders.Where(x => x.FirstName.StartsWith(search) && x.OrderDate >= today || search == null).ToList());
}
if (date == "year")
{
DateTime today = DateTime.Now.AddYears(-1);
return View(db.Orders.Where(x => x.FirstName.StartsWith(search) && x.OrderDate >= today || search == null).ToList());
}
else
{ return View(db.Orders.Where(x => x.FirstName.StartsWith(search) || search == null).ToList());
}
我的看法;
@using (Html.BeginForm("Index", "EditOrders", FormMethod.Get))
{
//the following are search options
<b> Search for: </b>@Html.RadioButton("option", "FirstName") <text>First Name</text> @Html.RadioButton("option", "PostalCode") <text> Post-Code </text>
@Html.RadioButton("option", "Username")<text>Email-Address</text> @Html.TextBox("search")
<text>Orders Made </text><select id="date" name="date">
<option value="none">All Orders</option>
<option value="day">In the last day</option>
<option value="week">In the last week</option>
<option value="month">In the last month</option>
<option value="year">In the last year</option>
</select>
<input type="submit" name="submit" value="Search" />
}
【问题讨论】:
-
这适用于工厂模式的实现;您的控制器看起来很简单,只有两行代码,但这些条件将出现在您的 Factory 类中,该类返回必要的对象
-
另一种选择是将您的值更改为实际天数;例如:代替“day”,将其更改为“1”;而不是“周”,将其更改为“7”;使用该值减去控制器中的天数
-
使用 IQueryable 并分别添加每个选项(名字、电子邮件、邮政编码、日期)。更多信息:stackoverflow.com/questions/22122618/…
标签: c# asp.net-mvc entity-framework razor