代码之家  ›  专栏  ›  技术社区  ›  madcapnmckay

以编程方式将HTML插入视图

  •  1
  • madcapnmckay  · 技术社区  · 16 年前

    我有一个棘手的问题,我不确定在视图渲染过程中在哪里尝试这个问题。我正在MVC中构建一个简单的blog/cms,如果用户以管理员身份登录(因此具有编辑权限),我想在页面中插入一些HTML(最好是部分视图)。

    显然,我可以将呈现部分添加到母版页等,但在我的系统中,母版页/视图是CMS的“模板”,因此不应包含CMS特定的<%>标记。我想钩住渲染过程的某个部分,自己注入HTML。

    有人知道如何在MVC中实现这一点吗?最好的点、视图页面和视图引擎在哪里?

    谢谢,

    伊恩

    2 回复  |  直到 16 年前
        1
  •  1
  •   Darin Dimitrov    16 年前

    你可以使用 Html.RenderPartial 在页面的某个位置插入HTML片段。如果要将其插入到视图不可用但仅在主控形状上的位置,可以放置 <asp:ContentPlaceHolder ID="Admin" runat="server" /> 主控形状和视图中的占位符只需覆盖它并插入部分。如果放置这样一个占位符是不可接受的,您可以使用ajax,例如: $('#adminHolder').load('/home/admin'); 但我可能会使用前面的方法,因为它在用户禁用javascript的情况下可以工作。

        2
  •  0
  •   madcapnmckay    16 年前

    好吧,这是有点乱,结果有点糟糕。但它起作用了,这才是最重要的…

        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            if (!User.Identity.IsAuthenticated || !User.IsInRole("Admin"))
            {
                // If not admin continue as normal
                base.Render(writer);
                return;
            }
    
            // Taking a leaf out of the move viewstate to the bottom of page playbook
            var stringWriter = new System.IO.StringWriter();
            var htmlWriter = new HtmlTextWriter(stringWriter);
            base.Render(htmlWriter);
            var html = stringWriter.ToString();
            var endOfBody = html.IndexOf("</body>") - 1;
            if (endOfBody >= 0)
            {
                var adminConsole = Html.RenderPartialAsString("AdminPanel");
                html = html.Insert(endOfBody, adminConsole);
            }
            writer.Write(html);
        }
    

    我实现了自己的viewpage来覆盖render方法。这将检查用户是否以管理员身份登录,如果以管理员身份登录,则会在页面底部呈现部分内容。非常类似于旧的skool viewstate网络表单。

    享受。

    推荐文章