MVC 3不能传递string作为视图的模型?
我有一个奇怪的问题,我的模型传递给视图
调节器
[Authorize] public ActionResult Sth() { return View("~/Views/Sth/Sth.cshtml", "abc"); } 视图
 @model string @{ ViewBag.Title = "lorem"; Layout = "~/Views/Shared/Default.cshtml"; } 
错误消息
 The view '~/Views/Sth/Sth.cshtml' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Sth/Sth.cshtml ~/Views/Sth/abc.master //string model is threated as a possible Layout's name ? ~/Views/Shared/abc.master ~/Views/Sth/abc.cshtml ~/Views/Sth/abc.vbhtml ~/Views/Shared/abc.cshtml ~/Views/Shared/abc.vbhtml 
为什么我不能传递一个简单的string作为模型?
是的,你可以如果你正在使用正确的超载 :
 return View("~/Views/Sth/Sth.cshtml" /* view name*/, null /* master name */, "abc" /* model */); 
如果使用命名参数,则可以省略完全给出第一个参数
 return View(model:"abc"); 
要么
 return View(viewName:"~/Views/Sth/Sth.cshtml", model:"abc"); 
也将达到目的。
 你的意思是这个View过载: 
 protected internal ViewResult View(string viewName, Object model) 
MVC被这个过载所困惑:
 protected internal ViewResult View(string viewName, string masterName) 
使用这个过载:
 protected internal virtual ViewResult View(string viewName, string masterName, Object model) 
这条路:
 return View("~/Views/Sth/Sth.cshtml", null , "abc"); 
顺便说一下,你可以使用这个:
 return View("Sth", null, "abc"); 
在MSDN上重载parsing
如果将该string声明为对象,它也可以工作:
 object str = "abc"; return View(str); 
要么:
 return View("abc" as object); 
如果您为前两个parameter passingnull,它也可以工作:
 return View(null, null, "abc");