I am very new to MVC and software development, and I want to implement a search by date functionality within my application. On the index view I want users to be able to search by two date fields that are available on the web page, "Date" and "Order Date". Currently this is the code I have in the view, it basically specifies the layout of the page.
using (Html.BeginForm("Index","PurchaseOrder",FormMethod.Get))
{
<p>
Search by Date: @Html.TextBox("searchBy","dateSearchBegin") to: @Html.TextBox("searchBy","dateSearchEnd")
<input type="submit" value="Search" /> <br /><br />
Search by Order Date: @Html.TextBox("searchBy","dateOrderedBegin") to: @Html.TextBox("searchBy","dateOrderedEnd")
<input type="submit" value="Search" />
<br /> <br />
Search by: @Html.RadioButton("searchBy","Requestor", true) Requestor
@Html.RadioButton("searchBy","Vendor") Vendor
@Html.RadioButton("searchBy","workOrder") Work Order # <br />
@Html.TextBox("search","", new { style = "width:10000px" })
<input type="submit" value="Search" />
</p>
}
In the controller, I have this code. This is where I am trying to provide the logic to be able to filter by different fields.
// GET: PurchaseOrder
public ActionResult Index(string searchBy, string search, int? page)
{
if (searchBy == "Requestor")
{
return View(db.PurchaseOrders.Where(x => x.Requestor.ToUpper().Contains(search)).OrderBy(i => i.DateOrdered).ToPagedList(page ?? 1, 15));
}
else if (searchBy == "Vendor")
{
return View(db.PurchaseOrders.Where(x => x.Vendor.ToUpper().Contains(search)).OrderBy(i=>i.DateOrdered).ToPagedList(page??1,15));
}
else if (searchBy == "workOrder")
{
return View(db.PurchaseOrders.Where(x => x.PurchaseRequest_.ToUpper().Contains(search)).OrderBy(i => i.DateOrdered).ToPagedList(page ?? 1, 15));
}
else if (searchBy == "dateSearchBegin")
{
return View(db.PurchaseOrders.Where(x => x.Date > "dateSearchBegin" && x.Date < "dateSearchEnd").OrderBy(i => i.Date).ToPagedList(page ?? 1,15));
}
else if (searchBy == "dateSearchEnd")
{
return View(db.PurchaseOrders.Where(x => x.Date > "dateOrderedBegin" && x.Date < "dateOrderedEnd").OrderBy(i => i.Date).ToPagedList(page ?? 1,15));
}
int pageSize = 15;
int pageNumber = (page ?? 1);
pageNumber = page == null ? (ViewBag.pageData == null ? 1 : (int)ViewBag.pageData) : page.Value;
ViewBag.pageData = page;
return View(db.PurchaseOrders.OrderBy(i => i.DateOrdered).ToPagedList(pageNumber, pageSize));
}
I am getting an error message that states "operator '<' cannot be applied to operands of type 'System.DateTime?' and 'string'. How can I fix this error, and is there a more efficient way to code this to achieve what I am trying to do?
DateTimeobject withstringx.Date > "dateSearchBegin"you're comparing typesDateTimeandstringwhich isn't valid or logical