【问题标题】:Why controller asking full path to go to view in mvc3?为什么控制器要求在 mvc3 中查看完整路径?
【发布时间】:2013-12-05 06:27:03
【问题描述】:

我为动作方法写了一个局部视图。如果在动作方法中给出该局部视图的完整路径,它会直接返回 view() 它没有返回视图。为什么它询问视图的完整路径? 请告诉我。

[HttpPost]
        public ActionResult SearchResults(FormCollection collection)
        {
 return View("/Areas/Admin/Views/Search/ShowResults.ascx",vm); --it's working
//return View(); --it's not returning view.why?
}

路线:

routes.MapRoute(
                "Default",                                                 // Route name
                "{controller}/{action}/{id}",                              // URL with parameters
                new { area = "", controller = "home", action = "index", id = "" },   // Parameter defaults
                new string[] { "MVC.Web.Controllers" }
            );

【问题讨论】:

  • 由于该视图未分配给操作 SearchResults 框架无法找到相应的视图。右键单击动作名称并单击 go 以查看显示的内容?
  • 在右击该动作时转到该视图但运行该代码不会转到部分视图。
  • 通过使用 javascript 匿名方法,我在加载页面时调用该操作。
  • 你能显示你的路线吗,那里有什么虚拟机,
  • 这里 vm 是列表 传递给视图的数据。

标签: jquery asp.net-mvc-3


【解决方案1】:

失败的原因是您没有名为SearchResults 的视图(您的操作方法的名称)。您返回的视图是ShowResults。由于您使用的视图名称与实际操作名称不同,因此您需要指定它。此外,由于您要返回部分视图,因此最好使用 return PartialView 方法告诉 MVC 您正在这样做

[HttpPost]
public ActionResult SearchResults(FormCollection collection)
{
  return PartialView("ShowResults", vm);
}

只要ShowResults 视图位于与控制器同名的视图目录中或位于共享视图文件夹中,这将起作用。如果视图不在这些位置之一,那么您将需要指定视图的完整路径,因为视图引擎将无法自行找到它。

[HttpPost]
public ActionResult SearchResults(FormCollection collection)
{
    return PartialView("~/Areas/Admin/Views/Search/ShowResults.ascx",vm);
}

此外,当使用完整路径时,请务必以 ~ 字符开头,因为这会告诉 IIS/.NET 开始查看应用程序的根目录,而不是站点的根目录。它现在可能可以工作,但是如果您将站点移动到虚拟目录或不在托管域根目录中的东西,它将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多