У меня есть индексный список, содержащий список записей. У меня есть 2 поля datepicker (FromDate, ToDate), которые я использую, чтобы разрешить пользователям фильтровать данные в списке. Первые пользователи времени получить доступ к странице, нет никаких значений в FromDate и Todate перейти к действиюMVC Невозможно передать значение одному из двух параметров по URL
Index(DateTime? fd, DateTime? td)
поэтому я использую значение по умолчанию
fromDate = DateTime.Today.AddDays(-7); // and
toDate = DateTime.Today.AddDays(14);
После загрузки Индексных с данными по умолчанию, пользователи теперь могут используйте поля даты, чтобы изменить диапазон дат. Каждый раз, когда пользователи нажимают на поиск, я передам значения из двух полей даты в действие индекса в моем контроллере, используя url. Однако первое значение (fd) не передается контроллеру. Второе значение (td) правильно передается на контроллер. Что я делаю неправильно? Или есть лучший подход/лучшая практика для этого?
Мой Индексный просмотр:
<a id="btnSearch" class="btn btn-info" href="/Slide/Index/[email protected]("dd-MM-yyyy")&[email protected]("dd-MM-yyyy")"> Search </a>
<div class="input-group date">
<span>From: </span>@Html.TextBox("FromDate", (DateTime)ViewBag.FromDate, new { @class = "col-md-6", @style="width:80px" })
</div>
<div class="input-group date">
<span>From: </span>@Html.TextBox("ToDate", (DateTime)ViewBag.ToDate, new { @class = "col-md-6", @style="width:80px" })
</div>
<div class="row">
<table class="table table-hover" style="width:auto" id="sTable">
//this is where I list the result data here....
</table>
</div><!--End of row-->
Мои маршруты:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Slide",
url: "Slide/Index/{fd}/{td}",
defaults: new { controller = "Slide", action = "Index", fd = UrlParameter.Optional, td = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
И метод действия:
public ActionResult Index(DateTime? fd = null, DateTime? td = null)
{
DateTime fromDate;
DateTime toDate;
if (!fd.HasValue)
fromDate = DateTime.Today.AddDays(-7);
else
fromDate = fd.Value;
if (!td.HasValue)
toDate = DateTime.Today.AddDays(14);
else
toDate = td.Value;
IEnumerable<EZone_SlideInfo> lSlide = _slideRepo.GetSlideByExpiration(fromDate, toDate);
ViewBag.FromDate = DateTime.Parse(fromDate.ToShortDateString());
ViewBag.ToDate = DateTime.Parse(toDate.ToShortDateString());
return View(lSlide);
}
У вас может быть только последний параметр, являющийся необязательным, поэтому удалите с маршрута 'fd = UrlParameter.Optional' и измените метод на« Index (DateTime fd, DateTime? Td) »(и если вы всегда проходите 2 даты, тогда ваш должен сделать то же самое для 'td' (то есть не является нулевым) –
Его также неясно, с каким видом связан ваш' '. Если его метод' Index() ', то ваш присваивая свойства 'ViewBag' для' FromDate' и 'ToDate' как строки для' [email protected] ("dd-MM-yyyy") 'не будет работать (это уже строка, а не' DateTime') –
@ Stephen: см. Мое обновление. Спасибо –