将 Razor 视图呈现为 ASP.NET Core 中的字符串将忽略 ASP 属性



当我以通常的方式运行MVC请求时,HTML标记中淹没的ASP属性被正确解释。

例如

这就是我的观点,

        <ul class="nav navbar-nav">
            <li><a asp-controller="Home" asp-action="Index">Home</a></li>
            <li><a asp-controller="Home" asp-action="About">About</a></li>
            <li><a asp-controller="Home" asp-action="Contact">Contact</a></li>
        </ul>

这就是它在浏览器方面的翻译,

<ul class="nav navbar-nav">
      <li><a href="Home/Index">Home</a></li>
      <li><a href="/Home/About">About</a></li>
      <li><a href="/Home/Contact">Contact</a></li>
</ul>

现在,如果我通过以下函数呈现视图,

    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();
        }
    }

锚标记中淹没的属性保持原样,看起来视图引擎根本不会解释它们。

            <ul class="nav navbar-nav">
                <li><a asp-controller="Home" asp-action="Index">Home</a></li>
                <li><a asp-controller="Home" asp-action="About">About</a></li>
                <li><a asp-controller="Home" asp-action="Contact">Contact</a></li>
            </ul>

我尝试了您的RenderPartialViewToString代码,一切对我来说都很好。我猜当你使用RenderPartialViewToString时,你会把你的视图放在标准View文件夹之外。所以请尝试下一个代码

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"   
<ul class="nav navbar-nav">
    <li><a asp-controller="Home" asp-action="Index">Home</a></li>
    <li><a asp-controller="Home" asp-action="About">About</a></li>
    <li><a asp-controller="Home" asp-action="Contact">Contact</a></li>
</ul>

因此,如果我是对的并且之后一切正常,您可以尝试将_ViewImports.cshtml文件添加到该文件夹中并在那里写入@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"以便该文件夹或子文件夹中的所有视图都将应用相同的逻辑

最新更新