如何将字符串呈现为MVC视图

本文关键字:MVC 视图 字符串 | 更新日期: 2023-09-27 18:13:15

我所在的团队正在构建一个大型ASP。NET MVC应用程序。我想有一个占位符,显示字符串"尚未实现",当一个菜单选项被选中,还没有由团队实现。我从返回this.Content("Not yet Implemented");开始,但这种方法没有渲染包含菜单的布局,所以测试人员被带入了死胡同。有没有一种方法来渲染只是布局中的字符串,而不创建视图?我不想创建一个在项目完成后就会被删除的视图。

EDIT:我很抱歉,如果我在这里不清楚,但目标是渲染任意字符串作为视图。建议我创建一个.cshtml文件并不能回答我的问题。我将通过实现错误处理和抛出异常来解决问题(无论如何,这感觉更"正确")。不管怎样,我还是把这个问题留了下来,因为我很好奇我最初想做的事情是否可能。

如何将字符串呈现为MVC视图

通常你可以使用:

return Content("Not yet Implemented");

但是…你可以在Shared中添加视图,而不是返回Content("XXX"),你调用return View("Shared/NotImplementedView");

与前一个类似,如果您的操作在那里(因为它将被调用),您还可以添加一个视图,但现在将"<h3>Not yet implemented</h3>"标记作为其内容。一旦实现,你就可以替换它的内容。这样,您不需要指定视图名称,只需执行return View();(如果视图与动作同名)

你可以直接使用ViewBag。在服务器端,这样做:

ViewBag.MyString = "hello world";
return View();

在你的标记中:

@ViewBag.MyString

或者你可以这样做:

string notImplementedYet = "Not implemented yet.";
return View((object)notImplementedYet);

就像Darin Dimitrov那天提醒我的一样:

MVC 4动作结果er

我个人会抛出NotImplementedException或更优雅的东西,而不是返回字符串作为模型,但如果它是一个持有页面,而在开发中,我想字符串是可以的。

我不确定这是否适合你想要做的事情,因为你想要的只是在页面上显示错误但这里有一个函数,可以让你将任何razor视图呈现为字符串:

 public string RenderRazorViewToString(string viewName, object model = null)
 {
   ViewData.Model = model;
   using (sw == new System.IO.StringWriter())
   {
     dynamic viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
 dynamic viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
 viewResult.View.Render(viewContext, sw);
 return sw.GetStringBuilder().ToString();
   }
 }

这将允许你获得任何剃刀视图作为字符串,然后你可以对它做任何你想做的事情。真正酷的是你也可以传入模型