- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我到处搜索,我想要的基本上是不使用 Controller 或操作上下文的 MVC6 的 RenderViewToString。
由于自定义 TagHelpers 进入了它们自己的类,这些上下文将不可用。
目前我有以下代码,我非常想将 html 放在 Razor View 中,因为这是 Not Acceptable ,哈哈。
public class WindowTagHelper : TagHelper
{
public string Title { get; set; }
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var preContent = await output.GetChildContentAsync();
var id = context.UniqueId;
output.TagName = "div";
output.Attributes["id"] = id;
output.Attributes["class"] = "window";
output.TagMode = TagMode.StartTagAndEndTag;
var windowControls = new StringBuilder();
windowControls.Append("<div class=\"window-controls\">");
windowControls.Append("<ul class=\"window-icon-list\">");
var minimizeIcon = "<li class=\"control-icon\"><a data-window-id=\"{0}\" class=\"control-icon-minimize\" href=\"#\" data-toggle=\"tooltip\" title=\"Minimize Window\"><div class=\"fa fa-minus\"></div></a></li>".InjectWith(id);
var maximizeIcon = "<li class=\"control-icon\"><a data-window-id=\"{0}\" class=\"control-icon-maximize\" href=\"#\" data-toggle=\"tooltip\" title=\"Maximize Window\"><div class=\"fa fa-square-o\"></div></a></li>".InjectWith(id);
var closeIcon = "<li class=\"control-icon\"><a data-window-id=\"{0}\" class=\"control-icon-close\" href=\"#\" data-toggle=\"tooltip\" title=\"Close Window\"><div class=\"fa fa-close\"></div></a></li>".InjectWith(id);
windowControls.Append(minimizeIcon);
windowControls.Append(maximizeIcon);
windowControls.Append(closeIcon);
windowControls.Append("</ul>");
windowControls.Append("</div>");
var content = new StringBuilder();
content.AppendFormat("<div class=\"window-title\">{0}{1}</div>", windowControls.ToString(), Title);
content.Append(preContent.GetContent());
output.Content.AppendHtml(content.ToString());
}
}
以下方法不起作用,它抛出异常并注入(inject) ICompositeViewEngine,因为服务需要 Controller /操作上下文。
public string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ActionContext.ActionDescriptor.Name;
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
var engine = Resolver.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = engine.FindPartialView(ActionContext, viewName);
ViewContext viewContext = new ViewContext(ActionContext, viewResult.View, ViewData, TempData, sw,new HtmlHelperOptions());
var t = viewResult.View.RenderAsync(viewContext);
t.Wait();
return sw.GetStringBuilder().ToString();
}
}
最佳答案
我们通过自定义标签助手和 ViewContext 扩展实现了它
[ViewContext]
public ViewContext ViewContext { get; set; }
public async override void Process(TagHelperContext context, TagHelperOutput output)
{
var sw = new StringWriter();
// Create a new viewData (viewbag). This will be used in a new ViewContext to define the model we want
ViewDataDictionary viewData = new ViewDataDictionary(ViewContext.ViewData, For.Model);
// Generate a viewContext with our viewData
var viewContext = new ViewContext(ViewContext, ViewContext.View, viewData, ViewContext.TempData, sw, new HtmlHelperOptions());
// Use the viewContext to run the given ViewName
output.Content.Append(new HtmlString(await viewContext.RenderPartialView(ViewName)));
}
public async static Task<string> RenderPartialView(this ViewContext context, string viewName, ICompositeViewEngine viewEngine = null, ViewEngineResult viewResult = null)
{
viewEngine = viewEngine ?? context.HttpContext.RequestServices.GetRequiredService<ICompositeViewEngine>();
viewResult = viewResult ?? viewEngine.FindPartialView(context, viewName);
await viewResult.View.RenderAsync(context);
return context.Writer.ToString();
}
关于c# - 通过自定义 taghelper 渲染局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298605/
有没有办法让 TagHelper 渲染另一个 TagHelper? 示例标签助手; public class OuterTagHelper : TagHelper { public overr
我要触发股票ScriptTagHelper ( view source on GitHub ) 以便模拟 asp-append-version="true"属性。 我知道使用它的正确方法是改变这个:
我正在编写一个简单的分页 TagHelper,我希望输出如下所示: Some Text Some Other Text ... 我的想法是,在定义我的类时,我会生成“a”元
我想知道是否可以从 ASP.Net Core 版本 2.1/2.2 中的子 TagHelper 元素访问父 TagHelper 的属性。 我正在寻找是否有可能建立子级-父级 TagHelper 关系,
这是对 this question 的后续问题,这似乎适用于较旧的 ASP.NET Core 版本(我使用的是 2.1)。 我正在尝试从 TagHelper 中手动调用 TagHelper。应用上面链
在带有 Razor View 的 ASP.NET Core 2.0 项目中,我在运行时加载一个包含 TagHelpers 的程序集。 当 .dll 位于项目的 bin 文件夹中或当 TagHelper
我正在尝试在 MVC 6/ASP.Net vNext 中创建一个自定义标签助手 - taghelper 工作正常,但是有一种方法可以指定有效的 asp- 属性以与标签一起使用,以便它们出现在智能感知?
尝试编写自定义 TagHelper 来显示模型属性的 Description 属性。一切似乎都正常,但描述文本没有传递到我的 ModelExpression 元数据,它仍然是 null。 这是一个 a
带有包含此行的局部 View 我得到以下输出 > 这意味着我需要使用像这样的 Bind 属性在我的操作定义中考虑该“表单”前缀 public async Task SendContactForm(
如果我有这样的标签: Some content 如何获取 TagHelper 中的内容? 我在 TagHelper 或 TagHelperContext 上看不到任何内容。 我正在尝试解析标签的内容。
我使用的是asp core 2.0 MVC,经常在表单中使用这样的代码:
在 C# (ASP.NET Core) 项目中,登录后,站点必须根据用户的权限列出一个带有子菜单的菜单。此菜单出现在所有站点中。基本上是一个仪表板菜单。 这个菜单(子菜单)的内容是动态的,根据用户的许
某些模型属性具有“必需”数据注释,我需要在 TagHelper 类中读取这些注释。 public partial class Sale { [Required] public stri
我正在编写一个自定义 TagHelper 并希望在其中呈现一个 ViewComponent。 类似于 vc:xyz 标记助手所做的事情,但以一种更可控的方式,以便我可以在运行时确定要渲染哪个 View
我创建了一个标签助手,并希望在我的 Blazor 示例项目中使用它。但是,当我想使用标签助手时,编译器会提示: CS0103 当前上下文 FirstBlazorApp 中不存在名称“StartTagH
在链接上指定 asp-controller 和 asp-action 时,同时传递 id 属性的语法是什么? 例如例如,如果我想链接到给定对象的编辑 URL,则所需的 URL 为 /user/edit
我正在尝试创建一个表标记助手,它可以自动解析给定模型中的列和行。 这是它应该如何(理论上使用): 这应该自动显示列名和行。 生成列名并不难,因为我正在传递模型 [HtmlTargetElement
我写了一个标签助手,我需要获取模型属性的类型,因为我想基于它创建一个 html 标签实例。 如果它的类型是Boolean,我想创建Checkbox 的实例等等。 [HtmlTargetElement(
我到处搜索,我想要的基本上是不使用 Controller 或操作上下文的 MVC6 的 RenderViewToString。 由于自定义 TagHelpers 进入了它们自己的类,这些上下文将不可用
在 ASP.NET 5 MVC6 RC1 中——我有一个 ViewComponent,它旨在代表我传统的“屏幕左侧”主菜单。 我正在编写我的第一个 TagHelper 来表示每个菜单项链接。 我卡在了
我是一名优秀的程序员,十分优秀!