使我的控制器代码更清晰,重复性更低

时间:2016-04-27 14:03:45

标签: c# asp.net-mvc entity-framework razor

我将在下面发布我的观点和控制器。

我想知道是否有更好的方法可以做到这一点所以我不需要相同的代码4次,因为堵塞我的控制器和更好的练习是相当多的将使它更可重复使用,而不是重复和改变轻微的部分。

以下是它的工作原理:用户从FirstNameEmailPostCode中选择一个选项,然后可以选择时间范围,如下所示。为每个进行此操作将是一个简单的复制/粘贴和更改,但我想尽可能使用更少的代码。

这是我的控制器声明:

//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" />
}

2 个答案:

答案 0 :(得分:2)

如何更改表单中的实际值

    @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="0">All Orders</option>
    <option value="1">In the last day</option>
    <option value="7">In the last week</option>
    <option value="30">In the last month</option>
    <option value="365">In the last year</option>
    </select>
    <input type="submit" name="submit" value="Search" />
}

您的控制器代码

if (option == "FirstName")
{ 
    var days = Convert.ToInt32(date) * -1;

    if(days > 0)
    {
        DateTime today = DateTime.Now.AddDays(days);
        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());
    }
}

答案 1 :(得分:0)

这是应该在视图和控制器上应该是什么之间的细微差别,哈哈。 我投票清除代码控制器代码而不是更改视图。 您可以使用factory模式,如果有时间,也可以查看干净的代码概念。在MVA上有一些很好的教训。 再次,是个人的。

最佳!