2015-10-21 39 views
0

我有我通过我的标头@ Html.Action BaseController,但我想通过我的UI控制器的行动通过BaseController的UI元素。我可以使用什么而不是@ Html.action?

BaseController: var UIElements = new BL.UIElements().GetUIElementsListForWeb(language); var MenuItems = new BL.Menu().GetMenuListForWeb(language, true, null, null);

HomeLayout:@Html.Action("_header", "Base") @RenderBody() 问题是RenderBody()正试图先通过模型。而视图内的UIElements(@Model.UIElements.contactUs) 即将为空。我不想重复我的代码,并将UIelements放入每个控制器的操作中。

我该怎么做。我怎样才能首先渲染我的局部视图?

我希望你能理解我的问题。

感谢&问候

回答

0

你需要生成此Header行动的UI元素:

[ChildActionOnly] 
public ActionResult Header(string language) 
{ 
    var UIElements = new BL.UIElements().GetUIElementsListForWeb(language); 
    var MenuItems = new BL.Menu().GetMenuListForWeb(language, true, null, null); 
    var model = new HeaderModel{ 
     UIElements = UIElements, 
     MenuItems = MenuItems 
    } 

    return PartialView("_header", model) 
} 

public class HeaderModel 
{ 
    public IList<UIElement> UIElements {get; set;} //list of UI Elements 
    public IList<MenuItem> MenuItem{get; set;} //list of MenuItems 
} 

在你的布局,你可以用它

@Html.Action("Header", "Base" new {language = "en"}) //set your language parameter here 
+0

我已经这样做,当你提及。但是我想在RenderBody()内部创建的视图中使用这些UIElements。 – onurcan

+0

然后它真的不清楚你在问什么...... –

+0

我确实在BaseController中定义了一个方法,我正在使用它来获取UIElements。谢谢你的帮助。我解决了它。 – onurcan

相关问题