2017-04-04 43 views
0

新的MVC,所以在这里。ASP.net MVC 5从控制器加载HTML.Partial,而不是在cshtml页面加载

我目前加载了HTML.PartialIndex.cshtml页面上,像这样:

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

但是,我需要定制的,在控制器根据当前的用户类别号码

因此,作为一个例子,如果用户有3类,然后我需要做到这一点:

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

是否有的“背后的代码”,在控制器的任何类型的呼叫是我可以用来做到这一点?或者我只需要将代码放在cshtml页面中,并通过控制器将其类别编号传递给cshtml页面?

+0

您可以调用Ajax从客户加载数据,当你有类别编号。 –

+0

使用'@ Html.Action()'调用返回您的部分的服务器方法 –

回答

3

您可以渲染控制器操作中的部分视图。您可以将视图名称作为字符串传递。

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

要查看调用这个动作:(无论通过URL参数,从数据库,或)

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

但我没有使用任何viewModels。我只使用模型/视图/控制。 – StealthRT

+0

好吧,如果你在视图“3.cshtml”(即静态内容)中不需要任何数据,你就不需要传递视图模型。在这种情况下,动作只会做一种重定向,彼得莫里斯的解决方案会更简单。 –

+1

@StealthRT:我认为你对“视图模型”与MVC的关系感到困惑。你的“模型”就是提供给视图的任何东西,而创建视图模型的想法是创建实际满足视图需要的类,而不是使用通用的,通常不恰当的东西,比如实体类(这是什么我认为你认为是“模型”)。有关更完整的解释,请参阅我的帖子,实体不是模型(https://cpratt.co/entities-are-not-models/)。 –

1

确定在控制器中的类别,然后设置该值作为对你的看法的一个属性模型。然后在你的代码行,你可以做到这一点

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

+0

但我没有使用任何viewModels。我只使用模型/视图/控制。 – StealthRT

+0

然后为该视图创建一个视图模型 –