我可以使用什么而不是@Html.action?

时间:2015-10-21 06:02:16

标签: html asp.net-mvc razor

我有BaseController,我用@ Html.Action传递我的标题,但我试图通过BaseController将我的UI元素传递到其他控制器的动作中。

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放在每个控制器的操作中。

我该怎么办?如何首先渲染部分视图?

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

谢谢&此致

1 个答案:

答案 0 :(得分: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