Я выложу свой просмотр и контроллер ниже., делая мой код контроллера более чистым и менее повторяющимся
Мне интересно, есть ли лучший способ сделать это, поэтому мне не нужно иметь того же кода 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 pattern; ваш контроллер будет выглядеть просто двумя строками кода, но эти условия будут присутствовать в вашем классе Factory, который возвращает нужный объект – techspider
, один из вариантов - изменить ваши значения на фактические дни; для ex: вместо «day», измените его на «1»; вместо «недели», измените его на «7»; используйте это значение для вычитания дней в контроллере – techspider
Используйте IQueryable и добавьте каждый параметр (имя, адрес электронной почты, почтовый индекс, дату) отдельно. Дополнительная информация: http://stackoverflow.com/questions/22122618/selecting-data-using-entity-framework-based-on-optional-search-parameters –