【问题标题】:What can I Use Instead of @Html.action?我可以用什么来代替@Html.action?
【发布时间】:2015-10-21 06:02:15
【问题描述】:

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

基本控制器: var UIElements = new BL.UIElements().GetUIElementsListForWeb(language); var MenuItems = new BL.Menu().GetMenuListForWeb(language, true, null, null);

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

我该怎么办。如何先渲染我的局部视图?

希望你能理解我的问题。

感谢和问候

【问题讨论】:

    标签: html asp.net-mvc razor


    【解决方案1】:

    您需要在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
    

    【讨论】:

    • 我已经按照你所说的那样做了。但我想将这些 UIElements 使用到我在 RenderBody() 中创建的视图中。
    • 我确实在 BaseController 中定义了一个方法,并且在我想要获取 UIElements 的地方使用它。谢谢你的帮助。我解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多