gpt4 book ai didi

c# - 如何通过 Controller 返回另一个 Controller 的部分 View ?

转载 作者:IT王子 更新时间:2023-10-29 03:41:45 26 4
gpt4 key购买 nike

我在 Views\ABC 文件夹中有一个 XXX.cshtml 文件。它的 Controller 是ABC

我的 DEF Controller 中还有一个操作方法,它返回一个 Partialview("XXX", xyzmodel)

我收到“未找到 View ”错误。

如何从其他 Controller 调用那个 View

最佳答案

通常, View 属于支持其数据要求的特定匹配 Controller ,或者 View 属于 Views/Shared 文件夹(如果在 Controller 之间共享)(因此名称).

“回答”(但不推荐 - 见下文):

可以通过指定完整路径(包括扩展名)来引用来自另一个 Controller 的 View /部分 View ,例如:

return PartialView("~/views/ABC/XXX.cshtml", zyxmodel);

或相对路径(无扩展名),基于 @Max Toro 的回答

return PartialView("../ABC/XXX", zyxmodel);

但这无论如何都不是一个好主意

*注意:这是唯一有效的两种语法。不是 ABC\\XXXABC/XXX 或任何其他变体,因为它们都是相对路径并且找不到匹配项。

更好的选择:

您可以在您的 View 中使用 Html.Renderpartial,但它也需要扩展:

Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", modeldata);

@Html.Partial 用于内联 Razor 语法:

@Html.Partial("~/Views/ControllerName/ViewName.cshtml", modeldata)

您可以使用没有扩展名的 ../controller/view 语法(再次归功于@Max Toro):

@Html.Partial("../ControllerName/ViewName", modeldata)

注意:显然 RenderPartial 比 Partial 稍微快一点,但这并不重要。

如果你想实际调用另一个 Controller ,使用:

@Html.Action("action", "controller", parameters)

推荐方案:@Html.Action

我个人的偏好是使用 @Html.Action 因为它允许每个 Controller 管理自己的 View ,而不是交叉引用来自其他 Controller 的 View (这会导致像意大利面条一样的大困惑).

您通常只传递所需的键值(与任何其他 View 一样),例如对于你的例子:

@Html.Action("XXX", "ABC", new {id = model.xyzId })

这将执行 ABC.XXX 操作并就地呈现结果。这允许 View 和 Controller 保持独立独立(即可重用)。

2014 年 9 月更新:

我刚刚遇到无法使用@Html.Action,但需要根据actioncontroller 名称创建 View 路径的情况。为此,我向 UrlHelper 添加了这个简单的 View 扩展方法,这样你就可以说 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);
}
}

关于c# - 如何通过 Controller 返回另一个 Controller 的部分 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com