生成没有控制器操作的视图

时间:2015-12-17 16:04:36

标签: c# asp.net asp.net-mvc razor asp.net-mvc-controller

在我的ASP.NET MVC项目中,我有一个控制器,一个动作只是结果视图。这个Action没有得到任何参数,只返回一个CSHTML页面。这个页面不能是部分的。

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

//编辑 - 示例代码

现在,在我的UserPanelController中,我有一个动作ChangeSettings

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

所以如果我想获得一个配置View我必须向控制器发出请求,例如导航:

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

3 个答案:

答案 0 :(得分:1)

您可以通过调用以下方法自行渲染视图

 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。

希望这有帮助。

答案 1 :(得分:1)

也许我有点太晚了,但你可能正在寻找的是:

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

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

答案 2 :(得分:0)

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

为确保MVC路由不会干扰,您可以在路由中添加以下内容:

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