2009-11-23 3 views
2

Я экспериментирую с MvcContrib subcontrollers. Глядя на примере в источнике, ваш родительский контроллер (HomeController) принимает меры, которые принимают дки (FirstLevelSubController) в качестве параметра:Использование субколлекторов ASP.NET MVC с параметрами действия?

public class HomeController : Controller 
{ 
    public ActionResult Index(FirstLevelSubController firstLevel) 
    { 
     ViewData["Title"] = "Home Page"; 
     return View(); 
    } 
} 

В связи Хоум индекс, вы называете ViewData.Get как это Отрендерьте дки и это мнение:

<div style="border:dotted 1px blue"> 
    <%=ViewData["text"] %> 
    <% ViewData.Get<Action>("firstLevel").Invoke(); %> 
</div> 

действия подрегула ныряет называется (игнорировать secondlevelcontroller, пример просто демонстрируют, как вы можете вложить несколько subcontrollers):

public class FirstLevelSubController : SubController 
{ 
    public ViewResult FirstLevel(SecondLevelSubController secondLevel) 
    { 
     ViewData["text"] = "I am a first level controller"; 
     return View(); 
    } 
} 

Все это работает, представление субконтроллера отображается в родительском представлении.

Но что, если мне нужно другие параметры в действии моего домашнего контроллера? Например, я могу хотеть передать Guid к индексного метода моего контроллера:

public class HomeController : Controller 
{ 
    public ActionResult Index(Guid someId, FirstLevelSubController firstLevel) 
    { 
     //Do something with someId 
     ViewData["Title"] = "Home Page"; 
     return View(); 
    } 
} 

Там, кажется, не будет какой-либо способ сделать <% ViewData.Get («Firstlevel») Invoke();. %> с параметрами. Так что я не могу понять, как сделать ссылку на мой контроллер с другого контроллера передачи параметра, как это:

Html.ActionLink<HomeController>(x => x.Index(someThing.Id), "Edit") 

Возможно, я приближающегося это неправильный путь? Как еще я могу заставить мой родительский контроллер использовать субконтроллер, но также делать интересные вещи, такие как принимать параметры/аргументы?

ответ

3

Взгляните на этом блоге:

Передача объектов в SubControllers
http://mhinze.com/passing-objects-to-subcontrollers/

Обратите внимание, что SubControllers являются устаревшими. Они были заменены на RenderAction.

+0

Хорошее место - похоже, что SubControllers действительно устарели - я пробовал RenderAction, и он просто прекрасно работает в первый раз :) Спасибо, я бы потратил дни, пытаясь заставить это работать! –

+0

Страница не найдена! –

+0

@AbhishekMehta: [Эта ссылка на Wayback Machine] (http://web.archive.org/web/20100529051721/http://mhinze.com/passing-objects-to-subcontrollers) должна быть достаточной на данный момент. Также обратите внимание на последний абзац в моем ответе. –

Смежные вопросы