我必须在我的MVC应用程序中构建一些ascx部分视图来封装可重用的功能以及归档SOR和SOC。但是,我遇到了如何封装驱动MVC ascx视图的业务逻辑的挑战。MVC:如何在MVC ascx局部视图中封装逻辑与webforms ascx控件具有相同的效率?
在webforms中,ASCX控件背后的代码可以处理按钮单击事件,浏览器仍然只显示一个回发的同一页面。我如何在MVC中归档相同的东西?当〜/ Address/Edit/2包含一个带有一个按钮的ascx局部视图时,它会调用另一个MVC动作 - 让我们假设〜/ ShareController/CommonAction - CommonAction返回到相同视图的最佳方式是什么? ascx文件?
也许我错过了MVC web开发中的常见模式?
谢谢
最大
更新:这是关于我要寻找的模式更多的描述:
应该是一个地址编辑器的局部视图。它可以验证地址,显示 验证错误并将信息保存回数据库。
地址编辑器将坐在许多具有不同控制器/操作的页面上。
在经典的webform中,一个ascx控件可以通过多次回发完全与用户进行交互,而无需更改导致整个页面处理过程的url dor。 MVC中类似场景的正确模式是什么?
更新2:
不知道这有什么用网页表单的状态(statefullness)。完全不同的功能。这是关于控制器调用另一个子控制器(或子控制器)来处理局部视图。在本评论最后看到我的例子。
我只是想达到相同的封装和关注的分离等级。如果MVC框架没有,那是一个严重的弱点。
在MVC中,我们怎么能有一个“事物”(或缺乏更好的替代方案的部分视图)能够处理演示文稿以及逻辑并驻留在另一个父页面中而没有任何干扰?
我的理解是,MVC中的部分视图只是演示文稿,不能在不干扰主控制器的情况下拥有专用控制器。我希望我错了
为了给你另一个例子,考虑这个网页,你正在阅读“stackoverflow.com/questions/{id}”。它包含一个“添加评论”组件。添加评论可能会做服务器端验证,以防止无效评论。你怎么能创建一个端到端的“添加评论”组件,它可以驻留在任何页面上并处理必要的控制器逻辑?我能想到的唯一方法是修改主机页面的控制器,以便能够提供用户验证消息并要求他们通过回发来纠正错误。这意味着您将组件添加到10个不同的页面,您必须修改10个不同的控制器。杀死“干”
我希望我错了!因为我喜欢MVC软件。
结论:
标志着我肯尼的答案回复;但是,我认为这是MVC框架从封装,可重用性和DRY主体角度看的一个严重弱点。
我的意见与webforms的statefullness无关。
请允许我解释一下:
在网络表单,您可以100%在ascx控件和课程相关的DLL CLASSLIB的封装复杂的功能。一(1)名开发人员可以花几个星期来开发它。一旦他的工作完成,没有人需要知道任何事情,只是使用它。用户控件可以在许多页面中重复使用,而不会打扰其他“开发人员用户”使用ascx组件中的详细活动。
相比之下,您绝对不能在ASP.NET MVC中实现与ascx部分需要与用户交互的相同内容。一旦ascx需要交互,它需要它自己的控制器,控制器需要保存ModelState。
Jeremy Skinner在MVCContrib中引入了[ModelStateToTempData]: http://www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ 但是,这只是一个补丁。
一个好的框架应该允许开发人员100%封装他们的工作 - 控制,部分,ascx或其他 - 并将其交给团队的其他成员,这样他们就可以在不知道任何数据的情况下“使用它”。 Winform在许多复杂场景中完美实现了这一点。
尽管欢迎。
您在特定场景中使用的局部视图是什么?按钮点击的目的是什么? – 2010-08-11 05:39:29
嗨Jeff, 刚刚添加了更多评论。谢谢。 – DevTeach2010 2010-08-11 13:23:34