Asp.net 以编程方式将Html注入视图
我有一个棘手的问题,我不确定在视图渲染过程中的何处尝试此操作。我正在MVC中构建一个简单的blog/CMS,如果用户以管理员身份登录(因此具有编辑权限),我想在页面中插入一些html(最好是部分视图) 显然,我可以将呈现部分添加到母版页等中,但在我的系统中,母版页/视图是CMS的“模板”,因此不应包含特定于CMS的标记。我想连接到渲染过程的某些部分,并自己注入html 有人知道如何在MVC中做到这一点吗?最佳点在哪里,ViewPage,ViewEngine 谢谢Asp.net 以编程方式将Html注入视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个棘手的问题,我不确定在视图渲染过程中的何处尝试此操作。我正在MVC中构建一个简单的blog/CMS,如果用户以管理员身份登录(因此具有编辑权限),我想在页面中插入一些html(最好是部分视图) 显然,我可以将呈现部分添加到母版页等中,但在我的系统中,母版页/视图是CMS的“模板”,因此不应包含特定于CMS的标记。我想连接到渲染过程的某些部分,并自己注入html 有人知道如何在MVC中做到这一点吗?最佳点在哪里,ViewPage,ViewEngine 谢谢 Ian您可以使用Html.Ren
Ian您可以使用
Html.RenderPartial
在页面中的某个位置插入Html片段。如果要将其插入到视图不可用但仅在主控形状上的位置,可以在主控形状内放置一个
占位符,在视图中只需覆盖它并插入部分。如果放置这样的占位符是不可接受的,您可以使用AJAX,比如:$('adminHolder').load('/home/admin')
,但我可能会使用前面的方法,因为如果用户禁用了javascript,它将起作用。您可以使用Html.RenderPartial
在页面中的某个位置插入Html片段。如果要将其插入到视图不可用但仅在主控形状上的位置,可以在主控形状内放置一个
占位符,在视图中只需覆盖它并插入部分。如果放置这样的占位符是不可接受的,您可以使用AJAX,比如:$('adminHolder').load('/home/admin')代码>,但我可能会使用前面的方法,因为它可以在用户禁用javascript的情况下工作。好的,这需要一点混乱,结果有点粗糙。但它是有效的,这才是最重要的
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);
}
protected override void Render(System.Web.UI.HtmlTextWriter)
{
如果(!User.Identity.IsAuthenticated | | |!User.IsInRole(“Admin”))
{
//如果没有,则继续正常运行
base.Render(writer);
返回;
}
//从“移动视图状态”中翻出一页到“页面剧本”的底部
var stringWriter=new System.IO.stringWriter();
var htmlWriter=新的HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
var html=stringWriter.ToString();
var endOfBody=html.IndexOf(“”-1;
如果(内固定体>=0)
{
var adminConsole=Html.renderPartialString(“AdminPanel”);
html=html.Insert(endOfBody,adminConsole);
}
writer.Write(html);
}
我实现了自己的ViewPage,覆盖了Render方法。这将检查用户是否以管理员身份登录,如果是,则会在页面底部呈现部分。与webforms中的旧skool viewstate黑客非常相似
享受吧。好吧,这需要一点混乱,结果有点混乱。但它是有效的,这才是最重要的
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);
}
protected override void Render(System.Web.UI.HtmlTextWriter)
{
如果(!User.Identity.IsAuthenticated | | |!User.IsInRole(“Admin”))
{
//如果没有,则继续正常运行
base.Render(writer);
返回;
}
//从“移动视图状态”中翻出一页到“页面剧本”的底部
var stringWriter=new System.IO.stringWriter();
var htmlWriter=新的HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
var html=stringWriter.ToString();
var endOfBody=html.IndexOf(“”-1;
如果(内固定体>=0)
{
var adminConsole=Html.renderPartialString(“AdminPanel”);
html=html.Insert(endOfBody,adminConsole);
}
writer.Write(html);
}
我实现了自己的ViewPage,覆盖了Render方法。这将检查用户是否以管理员身份登录,如果是,则会在页面底部呈现部分。与webforms中的旧skool viewstate黑客非常相似
享受。但在CMS中,视图和母版页由模板创建者创建。我不能指望他们添加正确的Html.RenderPartial。这就是为什么我真的需要它是程序化的。这两件事是紧密相关的。我不知道有什么方法可以在不接触任何视图的情况下通过编程实现这一点。模板创建者不是要决定在哪里插入正确的HTML片段吗?注入的HTML不是模板的一部分。它包含一个管理界面,只需要插入到正文的末尾就可以显示为一个模式弹出窗口。如果这是一个经典的webforms应用程序,您将添加一个带有重写OnPreRender方法的basepage,该方法将在主体中插入控件。在MVC中必须有一种类似的方法,但在CMS中,视图和母版页是由模板创建者创建的。我不能指望他们添加正确的Html.RenderPartial。这就是为什么我真的需要它是程序化的。这两件事是紧密相关的。我不知道有什么方法可以在不接触任何视图的情况下通过编程实现这一点。模板创建者不是要决定在哪里插入正确的HTML片段吗?注入的HTML不是模板的一部分。它包含一个管理界面,只需要插入到正文的末尾就可以显示为一个模式弹出窗口。如果这是一个经典的webforms应用程序,您将添加一个带有重写OnPreRender方法的basepage,该方法将在主体中插入控件。在MVC中必须有一种类似的方法。