使用asp-for作为参数的自定义ViewComponent
我想包装这个:
到可重用的ViewComponent,其中属性将是参数:
我能够将asp-for参数传递给viewcomponent:
public class EditorViewComponent : ViewComponent { public IViewComponentResult Invoke(ModelExpression aspFor = null) { //when debugging, aspFor has correct value return View(aspFor); } }
但我无法在组件的视图中评估它。 这不起作用:
@model Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression
有任何想法吗?
我认为你正在混合ViewComponents和TagHelpers: https ://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components
查看组件
在以下事项中调用视图组件:
@await Component.InvokeAsync("EditorView", @Model.Property); // or
尝试以下snippit:
Taghelpers
标记助手只能像这样调用:
如果要将ModelExpression传递给基础ViewComponent,然后将其传递给TagHelper,则必须使用@TheModelExpression.Model
执行此操作:
@model Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression
正如@JoelHarkes所提到的,在这种特殊情况下,自定义taghelper可能更合适。 无论如何,我仍然可以在TagHelper中渲染PartialView ala Template:
[HtmlTargetElement("editor", Attributes = "asp-for", TagStructure = TagStructure.WithoutEndTag)] public class EditorTagHelper : TagHelper { private HtmlHelper _htmlHelper; private HtmlEncoder _htmlEncoder; public EditorTagHelper(IHtmlHelper htmlHelper, HtmlEncoder htmlEncoder) { _htmlHelper = htmlHelper as HtmlHelper; _htmlEncoder = htmlEncoder; } [HtmlAttributeName("asp-for")] public ModelExpression For { get; set; } [ViewContext] public ViewContext ViewContext { set => _htmlHelper.Contextualize(value); } public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = null; var partial = await _htmlHelper.PartialAsync("TagHelpers/Editor", For); var writer = new StringWriter(); partial.WriteTo(writer, _htmlEncoder); output.Content.SetHtmlContent(writer.ToString()); } }
然后.cshtml模板看起来与viewcomponent完全一样。
- 找不到ASP.NET 5.0中的HttpClient?
- .net-coredependency injection
- 如何在移动应用程序上进行身份validation后在.NET Core服务器上登录用户
- 如何在ASP.NET Core 2.1中获取客户端IP地址
- 如何从Startup.cs中编写日志
- error handling(将ex.Message发送到客户端)
- (http)coreclr / dnxCore中的Web请求提供程序?
- OpenIdConnectAuthenticationHandler:message.State为null或为空
- 在ASP.NET Core Identity UI中更改路由?