Я знаю, что здесь много вопросов и ответов относительно маршрутизации MVC. К сожалению, у меня все еще возникают проблемы с маршрутизацией, которых я не понимаю.
Прежде всего - могу ли я иметь перегруженные ActionResults в моем контроллере?
Например, я делаю 3 запроса к одному и тому же контроллеру / действию с разными параметрами.
- "/ MyController / DoSomething"
- "/ MyController / DoSomething / [Guid String]
- "/ MyController / DoSomething / [Guid String] / TypeA
... а в контроллере у меня есть эти методы
public ActionResult DoSomething()
{
ViewBag.Title = "Do Something By Default";
return View();
}
public ActionResult DoSomething(String id)
{
ViewBag.Title = "Do Something By id";
return View();
}
public ActionResult DoSomething(String id, String type)
{
ViewBag.Title = "Do Something By id and type";
return View();
}
Я ожидал, что каждый перегруженный метод будет делать это, но это не так. Единственный вызываемый ActionMethod - это DoSomething () независимо от вводимых мной параметров. Короче говоря, DoSomething (String id) и DoSomething (String id, String type) полностью игнорируются.
Даже когда я пытался это сделать ...
public ActionResult DoSomething(String? id)
{
ViewBag.Title = "Do Something Conditionally";
return View();
}
... просто чтобы посмотреть, что произойдет. Выдается ошибка компиляции
Ошибка 4 Тип 'string' должен быть типом значения, не допускающим значения NULL, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе 'System.Nullable'
ПРИМЕЧАНИЕ. Мои параметры - это строки (технически GUID), а не целые числа.
Я подумал, что, возможно, мне нужно сопоставить эти маршруты в классе / App_Start / RouteConfig, и попробовал это, чтобы посмотреть, смогу ли я заставить работать один перегруженный метод.
routes.MapRoute(
"MyController",
"MyController/DoSomething/{id}",
new { controller = "MyController", action = "DoSomething", id = "" }
);
... и все же DoSomething (String id) ActionResult не был вызван. Ни ошибок, ни исключений. Было бы, если бы у меня даже не было указанного MapRoute.
Что-то мне здесь не хватает? Будем очень признательны за любые идеи, инструкции и рекомендации, которые вы можете предоставить.
String?
недействительна, заключается в том, чтоString
является ссылочным типом - он уже допускает значение NULL. Вы можете заключать в объектNullable<>
только типы значений, потому что они не могут содержатьnull
сами по себе. - person Blindy   schedule 06.02.2015