在没有控制器操作的情况下生成视图

Generate view without controller action

在我的 ASP.NET MVC 项目中,我有一个控制器,一个操作只是结果视图。此操作没有任何参数,只是 return 一个 CSHTML 页面。此页面不能是部分的。

有没有人知道生成视图的更好方法 - 我的意思是我可以在没有控制器操作的情况下生成视图吗?

//编辑 - 示例代码

现在在我的 UserPanelController 中我有一个操作 ChangeSettings

[HttpGet]
public ActionResult ChangeSettings()
{
    return View("Configuration");
}

因此,如果我想获得配置视图,我必须向控制器发出请求,例如导航:

<nav>
     <div class="nav-wrapper">
       <a href="#" class="brand-logo">Logo</a>
       <ul id="nav-mobile" class="right hide-on-med-and-down">
            <li><a href="sass.html">Sass</a></li>
            <li><a href="badges.html">Components</a></li>
            <li><a href="@Url.Action("ChangeSettings","UserPanel")">Konrad</a></li>
       </ul>
     </div>
</nav>

我可以在没有控制器操作的情况下获得 ConfigurationView 吗?

如果是静态内容,可以在项目中添加一个.html文件。 Web 服务器将为其提供服务。

为了确保 MVC 路由不会干扰你可以在你的路由中添加这样的东西:

routes.IgnoreRoute("{file}.html");

您可以调用以下方法自己渲染视图

 private static string RenderPartialViewToString(Controller controller, string viewName, object model)
    {

        controller.ViewData.Model = model;

        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);

            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.ToString();
        }
    }

这将为您提供 html 包含渲染视图的字符串。我之前用它来呈现 HTML 电子邮件,其中电子邮件内容因用户而异。

希望对您有所帮助。

也许我来晚了,但您可能正在寻找的是:

 @{ Html.RenderPartial("_PartialViewName"); }

请注意,您也可以在视图中使用模型,方法是直接从调用局部视图的视图传递模型。