我的XXX.cshtml
文件Views\ABC
夹中有一个文件。它的控制器是ABC
我的DEF
控制器中也有一个操作方法,该方法返回一个Partialview("XXX" , xyzmodel)
我收到“找不到视图”错误。
如何从其他控制器调用该视图
我的XXX.cshtml
文件Views\ABC
夹中有一个文件。它的控制器是ABC
我的DEF
控制器中也有一个操作方法,该方法返回一个Partialview("XXX" , xyzmodel)
我收到“找不到视图”错误。
如何从其他控制器调用该视图
Answers:
通常,视图属于支持其数据要求的特定匹配控制器,或者,Views/Shared
如果视图在控制器之间共享(因此称为名称),则该视图属于文件夹。
您可以通过指定完整路径(包括扩展名)来引用其他控制器的视图/局部视图,例如:
return PartialView("~/views/ABC/XXX.cshtml", zyxmodel);
或相对路径(无扩展名),具体取决于答案 @Max Toro
return PartialView("../ABC/XXX", zyxmodel);
但无论如何这都不是一个好主意
*注意:这是仅有的两种语法。不是ABC\\XXX
或ABC/XXX
其他任何变体,因为它们都是相对路径且找不到匹配项。
您可以Html.Renderpartial
改为在视图中使用,但它也需要扩展名:
Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", modeldata);
使用@Html.Partial
内联剃刀语法:
@Html.Partial("~/Views/ControllerName/ViewName.cshtml", modeldata)
您可以使用../controller/view
不带扩展名的语法(再次感谢@Max Toro):
@Html.Partial("../ControllerName/ViewName", modeldata)
注意:显然RenderPartial
比Partial快一点,但这并不重要。
如果要实际调用另一个控制器,请使用:
@Html.Action("action", "controller", parameters)
我个人的喜好是使用@Html.Action
它,因为它允许每个控制器管理自己的视图,而不是交叉引用其他控制器的视图(这会导致类似意大利面条的大混乱)。
通常,您只需要传递所需的键值(例如任何其他视图),例如:
@Html.Action("XXX", "ABC", new {id = model.xyzId })
这将执行ABC.XXX
操作并就地呈现结果。这允许视图和控制器保持单独的独立(即可重用)。
我刚刚遇到无法使用@ Html.Action,但需要基于action
和controller
名称创建视图路径的情况。为此,我添加了此简单的View
扩展方法,UrlHelper
以便您可以说return PartialView(Url.View("actionName", "controllerName"), modelData)
:
public static class UrlHelperExtension
{
/// <summary>
/// Return a view path based on an action name and controller name
/// </summary>
/// <param name="url">Context for extension method</param>
/// <param name="action">Action name</param>
/// <param name="controller">Controller name</param>
/// <returns>A string in the form "~/views/{controller}/{action}.cshtml</returns>
public static string View(this UrlHelper url, string action, string controller)
{
return string.Format("~/Views/{1}/{0}.cshtml", action, controller);
}
}
控件按以下顺序搜索视图:
由于您不在xxx.cshtml
这些位置,它会返回“找不到视图”错误。
解决方案:您可以使用视图的完整路径:
喜欢
PartialView("~/views/ABC/XXX.cshtml", zyxmodel);
"best answer tick' and up-votes
分享有关。.谢谢您的观点。:)