надеюсь, что кто-то может помочь, потому что я ломал себе голову большую часть вчерашнего вечера! По сути, я пытаюсь заставить форму поиска работать с использованием HttpGet, чтобы потенциально получить результаты из внешнего источника по URL-адресу, например:
http://url.com/Area/Controller/Action/SearchCategory/SearchCriteria
Я создаю и передаю модель моему представлению, содержащему два свойства для SearchCategory и SearchCriteria , и в представлении отображаются соответствующие элементы управления HTML. Это прекрасно работает, если я выберу категорию и введу что-то по моим критериям. Однако, если я ничего не ввожу в свои критерии, я получаю бесконечное перенаправление. Мой маршрут для этой конкретной функции выглядит следующим образом:
context.MapRoute(
"Dashboard-Search",
"Area/Controller/Action/{SearchCategory}/{SearchCriteria}",
new {
controller = "Controller",
action = "Action",
SearchCategory = "",
SearchCriteria = ""
}
);
У меня есть модель, реализующая IValidateableObject, и я проверяю, что что-то было введено, но очевидно, что привязка маршрута выполняется до того, как что-либо может быть проверено.
Есть идеи ???
Маршруты
context.MapRoute(
"Dashboard-Search-NoCriteria",
"HEP/Dashboard/Search/{category}",
new { controller = "Dashboard", action = "Search", category = "Case No" }
);
context.MapRoute(
"Dashboard-Search",
"HEP/Dashboard/Search/{category}/{criteria}",
new { controller = "Dashboard", action = "Search", category = "Case No", criteria = "" }
);
Действие контроллера
[HttpGet]
public ActionResult Search(string SearchCategory, string SearchCriteria)
{
// create new instance of model and add search criteria so entered
// data persists on post back
DashboardModel model = new DashboardModel() {
SearchCategory = SearchCategory,
SearchCriteria = SearchCriteria
};
model.Search(SearchCategory, SearchCriteria);
// return the HTML view of another controller that displays the same list,
// only this time, the list is filtered according to GET data
return View("Overview", model);
}
HTML-форма
@using (Html.BeginForm("Search", "Dashboard", FormMethod.Get)) {
@Html.LabelFor(m => m.SearchCategory, "Category:")
@Html.DropDownListFor(m => m.SearchCategory, new List<SelectListItem>() {
new SelectListItem() { Selected = true, Text = "Category", Value = "Category" }
})
@Html.LabelFor(m => m.SearchCriteria, "Criteria:")
@Html.TextBoxFor(m => m.SearchCriteria)
<input type="submit" value="Search" class="button" />
}