使用asp.net mvc在视图页面中动态加载视图控件。可能?

时间:2009-09-18 04:30:00

标签: asp.net-mvc

我正在尝试找到一种方法来使用我可以用WebForms做的MVC。

我有一组用户需要完成的步骤来填写数据。在之前的案例中,它是在以网络形式设计的“分类广告”网站上注册动物。为简单起见,我们说它有3页。第1页询问他们下拉列表中的动物类型。这将显示[狗,猫,羊,羊驼,马]。在提交页面时,数据将被保存,然后转移到第二页。在第二页,他们将被要求提交特定于每只动物的信息。我选择为每只动物创建用户控件,而不是创建一个大页面并隐藏/显示该动物的相关控件,或者使用面板控件对数据进行分组。这个控件将继承自我创建的一个名为IAnimalTemplate的接口,它包含两个方法,Load()和Save()。第二页只包含一个占位符控件。然后,我将采用动物类型,然后将usercontrol动态加载到占位符中。当我单击提交按钮保存数据时,IAnimalTemplate的魔力才真正生效。提交按钮位于uer控件之外,因此我可以将用户控件转换为IAnimalTemplate并调用Save方法。它工作得非常出色,并允许我非常快速地为不同的动物创建大量模板/用户控件,并将组合存储/加载到数据库中。因为页面中的提交按钮调用了一个方法,然后在用户控件上调用了Save方法,然后我就可以从页面继续处理并转移到第3页。

现在我需要做一些与MVC非常相似的事情。我查看了MVCFutures中的Html.RenderAction,并在http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/查看了PartialRequests,但我真的不确定这些是否可以完成这项工作。这些似乎将视图模型保持在控件中是理想的,因为模型数据在“(动物)模板”之间变化,但是他们将调用自己的动作。当然我可以调用一个Save方法,我可以在一个接口中定义但是我不确定一旦执行完就可以继续执行视图控件之外的代码(在页面中)。也许我对此感到困惑,我希望有人可以在某处解决问题。我还需要扩展一些想法吗?

由于 劳埃德

1 个答案:

答案 0 :(得分:0)

尝试在新系统中以相同的方式解决问题往往是不好的形式。 MVC与ASP.NET的工作方式不同,所以你真的应该尝试在使用MVC时解决MVC方式。

使用MVC可以采用类似的方法来实现此功能。从MVC中查看部分内容是正确的。在MVC中,人们使用部分视图。您可以在部分视图中放置类型的表单控件,并将其呈现在页面上。

由于MVC在页面提交时将控件映射到类型上,因此您可以让控制器接受您尝试保存的类型的对象。单击保存按钮时,它将调用保存操作,该操作接受您尝试保存的类型的对象,并且您将能够保存它。

这种方法IMO实际上比以前在ASP.NET Web窗体中使用的用户控件方法更容易。