在ASP.NET Core中将Razor View渲染为字符串会忽略ASP属性

时间:2016-06-09 12:49:27

标签: asp.net-mvc asp.net-mvc-4 razor asp.net-core asp.net-core-mvc

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

E.g。

这就是我在视图中所拥有的,

        <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>

1 个答案:

答案 0 :(得分:1)

我尝试了您的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",以便该文件夹或子文件夹中的所有视图都将应用相同的逻辑