【问题标题】:ASP.net MVC 5 loading HTML.Partial from controller instead of loading on cshtml pageASP.net MVC 5 从控制器加载 HTML.Partial 而不是在 cshtml 页面上加载
【发布时间】:2017-08-29 17:20:33
【问题描述】:

MVC 新手,所以就到这里。

我目前正在我的 Index.cshtml 页面上加载 HTML.Partial,如下所示:

@Html.Partial("~/Views/Switchb/editPerson.cshtml")

但是,我需要根据当前用户类别编号在控制器中进行自定义。

例如,如果用户的类别为 3,那么我需要这样做:

@Html.Partial("~/Views/Switchb/3.cshtml")

控制器中的 “代码隐藏” 中是否有任何类型的调用可供我使用?还是我只需要将代码放在 cshtml 页面中并通过控制器将其类别编号传递给 cshtml 页面?

【问题讨论】:

  • 当您有类别编号时,您可以进行 ajax 调用以从客户端加载数据。
  • 使用@Html.Action() 调用返回部分的服务器方法

标签: c# asp.net-mvc razor partial-views


【解决方案1】:

您可以从控制器操作呈现局部视图。您可以将视图名称作为字符串传递。

public ActionResult Switchb(string categoryNumber) {
    var viewModel = new MyViewModel { CategoryNubmer = categoryNumber };
    // additional processing, backend calls, formatting ....
    return PartialView(categoryNumber, viewModel);
}

从视图中调用此操作:

@{
    var routeValues = new RouteValueDictionary(new {
        categoryNumber= "3",
    });
    Html.RenderAction("Switchb", "MyController", routeValues);
}

【讨论】:

  • 但我没有使用任何视图模型。我只使用模型/视图/控件。
  • 好吧,如果您不需要视图“3.cshtml”中的任何数据(即静态内容),则不需要传递视图模型。在这种情况下,action 只做一种重定向,而 Peter Morris 的解决方案会更简单。
  • @StealthRT:我认为您对“视图模型”与 MVC 的关系感到困惑。您的“模型”是提供给视图的任何内容,创建视图模型的想法是创建实际满足视图需求的类,而不是使用通用且通常不合适的东西,例如实体类(这就是我认为您认为是“模型”)。有关更完整的解释,请参阅我的帖子,实体不是模型 (cpratt.co/entities-are-not-models)。
【解决方案2】:

确定控制器中的类别(通过 url 参数、来自数据库或其他),然后将该值设置为视图模型的属性。然后在你的代码行中你可以这样做

@Html.Partial("~/Views/Switchb/" + Model.Category + ".cshtml");

【讨论】:

  • 但我没有使用任何视图模型。我只使用模型/视图/控件。
  • 然后为那个视图创建一个视图模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多