2010-07-02 24 views
0

所以就像标题所说,我在我的asp.net mvc应用程序中创建了一个视图模型,所以它将被强制类型为我的看法。我的视图模型是我的两个模型类的组合。现在,当用户点击该视图上的保存按钮时,它将转到控制器。它如何知道控制器要去哪里?我建立了我的控制器1 - 1,以便与我的模型和视图对话,因此控制器A知道模型A,控制器B知道模型B.但是如果我有一个视图模型是AB,它如何知道在子视图上转到A或B.我是否需要一个名为AB控制器的控制器?我有一个ViewModel强烈绑定到我的ASP.NET MVC应用程序中的视图,现在控制器怎么样

+0

选择哪个控制器将取决于路由集合中哪个路由匹配。看看[ASP.NET MVC路由概述](http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs)。 – R0MANARMY 2010-07-02 20:12:51

回答

0

调用的控制器和操作不依赖于用于在初始视图呈现期间绑定页面的视图模型对象。调用的控制器(和动作)由发送的请求的URL决定。 (您定义的其中一条路由将根据请求的URL字符串进行匹配,否则将返回404未找到的错误。)

HTML表单(通常为POST)中的提交按钮将会执行一个操作属性决定了它的url目标,一个锚标记将有一个href等等。

在你有自定义视图模型对象的情况下,它作为你行动的参数:

public ActionResult SaveSystemSetting(SystemAdminVM item) { 
0

一个Action Method没有收到一个模型。它接收参数。

无论如何,我想我知道你来自哪里:你的行动的参数之一有视图中使用的ViewModel的类型。这是一个常见的布局,很有意义。在很多项目中,它被广泛使用,以至于在一段时间后,你开始认为一个行为实际上会收到一个模型。

只需通过ModelBinder填充的任何东西来重新表明您的动作的参数。您可以将两个模型作为参数传递,您可以传递一个ViewModel,该模型会聚合模型a和b,或者您可以传递具有a + b属性的ViewModel。 Agregation是最常见的方法。

0

通常我们会在控制器中重载我们的操作方法,所以如果您有一个称为edit的操作,并使用您的viewmodel对象呈现视图,那么将为该方法指定HttpPost的重载编辑操作方法。

此方法的数据将作为表单值集合值传递,或者如果您喜欢并进一步处理,可以将其绑定到viewmodel对象。

相关问题