У меня есть простой вопрос о поведении ActionResult в ASP.NET MVC.ActionResult с различными параметрами
Мне нужно иметь два результата действия с тем же именем, но с разными параметрами. В частности, я хочу это:
public class CarController : Controller
{
[AuthorizeUser(AccessLevel = "New")]
public ActionResult New()
{
return View("New");
}
[AuthorizeUser(AccessLevel = "New?type=2")]
public ActionResult New(string type)
{
return View("NewCarType2");
}
}
Я знаю, что я могу переименовать второй результат действия с другим именем, но если я хочу, чтобы держать его на «новый»?
Я пробовал с route.maps без успеха. Я думаю, чтобы сделать это:
public class CarController : Controller
{
public ActionResult New (string type) {
if(!string.IsNullOrEmpty(type) && type.Equals("2")) {
return NewCarType2()
else
return New()
}
}
[AuthorizeUser(AccessLevel = "New?type=2")]
private ActionResult NewCarType2()
{
return View("NewCarType2");
}
[AuthorizeUser(AccessLevel = "New")]
private ActionResult New()
{
return View("New");
}
}
но атрибут для авторизации пользователя игнорируется .. также с подписью общественностью методы и атрибутом [NoAction].
Единственный способ, который я нахожу, чтобы делать то, что я хочу с классом наследования:
public class CarController : Controller
{
public virtual ActionResult New(string type)
{
if (!string.IsNullOrEmpty(type) && type.Equals("2"))
return RedirectToAction("NewCarType2", "CarOverride");
else
return RedirectToAction("New", "CarOverride");
}
}
public class CarOverrideController : CarController
{
[AuthorizeUser(AccessLevel = "New?type=2")]
public ActionResult NewCarType2(string type)
{
return View("NewCarType2");
}
[AuthorizeUser(AccessLevel = "New")]
public override ActionResult New(string type)
{
return View("New");
}
}
Но это правильный способ справиться с этой ситуацией (часть написать на имя ActionResults все разные) ?
На самом деле это концепция перегрузки методов http://stackoverflow.com/a/436935/3354492 Это сообщение ответит на ваши вопросы. – Puneet
Другим способом управления этим может быть определение одного как действие [HttpGet], а другое как действие [HttpPost] примечание: не уверен, что это то, что вы хотите здесь, но оно работает таким образом (во всяком случае, параметры должны быть разными) –
Определенно предлагайте НЕ использовать наследование здесь – timothyclifford