SearchController가있는 대신 컨트롤러에 대한 기본 클래스를 만들고 컨트롤러간에 공유 할 코드를 작성할 수 있습니다. 여러 컨트롤러에서 기능이 필요한 경우에는 의미가 있습니다.
의 당신이 당신의 컨트롤러에 대한 기본 클래스가 있다고 가정 해 봅시다 : 그런 다음 특정 컨트롤러를
public class BaseController : Controller
{
[HttpPost]
public ActionResult Search(string searchString)
{
// ... some process
return RedirectToAction("SomeAction", new { searchString = searchString });
}
public virtual ActionResult SomeAction(string searchString)
{
// ... some other process
}
}
을 :
public class MyController : BaseController
{
public override ActionResult SomeAction(string searchString)
{
// ... again some process
}
// .. some other actions
}
귀하의 partialview 대신 "SearchController"현재 컨트롤러를 대상으로한다 "검색"(기준 보기에서 컨트롤러 이름을 지정하지 않음), RedirectToAction은 이름을 가져올 필요없이 해당 컨트롤러의 작업으로 리디렉션됩니다 (위의 코드 스 니퍼에 컨트롤러 이름이없는 이유입니다).
대신 가상 메소드를 갖는로 다르게 전류 제어부에 따라 이름을 지정해야 할 경우에는 (가되는 searchString 파라미터 따라 다른 매개 변수가 될 수있다), 작업 이름으로 문자열 변수를 전달할 수
당신이 기본 클래스로 가고 싶어하지 않는 경우
public class BaseController : Controller
{
[HttpPost]
public ActionResult Search(string searchString, string targetAction)
{
// ... some process
return RedirectToAction(targetAction, new { searchString = searchString });
}
}
, 당신은 항상 당신의 검색 기능을 트리거하기 전에,보기에 현재의 컨트롤러 이름을 얻을 수 있습니다 : 컨트롤러에서
@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()
를, 그것은된다 :
,
[HttpPost]
public ActionResult Search(string searchString, string controllerName)
{
// ... some process
return RedirectToAction("action", controllerName, new { searchString = searchString });
}
하지만 기본 클래스를 사용하면 이러한 종류의 기능을 일반적이고 재사용 할 수있는 좋은 방법입니다.
"SearchString"을 SearchController에 게시하려면 아약스를 사용하고 있습니까? – Harminder
예 ... Ajax.Beginform – kandroid