这可能是一个非常直截了当的问题。但我建立一个MVC应用程序,由于不需要在这里解释的原因,我不认为我存储一个变量视图的路径。
var pathToView = "~/Views/ControllerName/ViewName.cshtml";
然后我从另一个控制器那样调用这个视图:
return View(pathToView);
这将返回一个服务器应用程序错误,指出无法找到视图。
但是,如果我通过以下内容:
return View(string.Format("{0}", pathToView));
这很好用。
我无法传递变量的原因是什么?
由于
修改
这是我正在使用的确切代码,其中有错误的返回语句被注释掉。
public ActionResult Returned()
{
//At this point Session["viewToReturn"] = "~/Views/ControllerName/ViewName.cshtml"
var view = Session["viewToReturn"];
return View(string.Format("{0}",view));
//return View(view);
}
答案 0 :(得分:0)
当您使用索引器从Session
获取项目时,它们将被检索为object
。
这反过来意味着通过调用
View(view)
view
是object
,选择了View
的错误重载:
protected internal ViewResult View(
object model
)
并且view
被解释为模型,而不是视图名称。现在View
正在查找与控制器方法名称匹配的视图,因为没有指定视图名称。
要纠正此问题,需要演员:
var view = (string)Session["viewToReturn"];
现在调用了预期的重载。