Dev*_*010 5 model-view-controller asp.net-mvc-2
我必须在我的MVC应用程序中构建一些ascx部分视图,以封装可重用的功能以及归档SOR和SOC.但是,我遇到了如何封装驱动MVC ascx视图的业务逻辑的挑战.
在webforms中,ASCX控件背后的代码可以处理按钮单击事件,浏览器仍然显示只有一个回发的同一页面.如何在MVC中归档同样的东西?当〜/ Address/Edit/2包含一个ascx局部视图,其上有一个调用另一个MVC动作的按钮 - 让我们说〜/ ShareController/CommonAction - CommonAction返回同一视图的最佳方式是什么,包括ascx文件?
也许我错过了MVC Web开发中的常见模式?
谢谢,
马克斯
更新:这里有关于我正在寻找的模式的更多描述:
部分视图应该是地址编辑器.它可以验证地址,显示验证错误并将信息保存回数据库.
地址编辑器将位于具有不同控制器/操作的许多页面上.
在经典的webform中,ascx控件可以通过许多回发与用户完美交互,而无需更改url dor扰乱整个页面进程.MVC中类似场景的正确模式是什么?
更新2:
不确定这与webform的状态有关.完全不同的功能.这是关于控制器调用另一个子控制器(或子控制器)来处理局部视图.请参阅本评论末尾的示例.
我只想达到相同级别的封装和分离关注.如果MVC框架没有那个,那就是一个严重的弱点.
在MVC中,我们怎么能有一个"东西"(或缺少更好的替代品的部分视图)能够处理演示文稿以及逻辑并驻留在另一个父页面中而没有任何干扰?
根据我的理解,MVC中的部分视图只是在不干扰主控制器的情况下无法使用专用控制器的演示.我希望我弄错了
再举一个例子,请考虑您正在阅读"stackoverflow.com/questions/{id}"的页面.它包括"添加注释"组件.添加注释可能会进行服务器端验证以防止无效注释.你怎么能创建一个端到端的"添加注释"组件,它可以驻留在任何页面上并处理必要的控制器逻辑?我能想到的唯一方法是修改主页的控制器,以便能够提供用户验证消息,并要求他们通过回发来纠正错误.这意味着您将组件添加到10个不同的页面,您必须修改10个不同的控制器.杀死"干"
我希望我错了!因为我喜欢MVC sofar.
结论:
我把肯尼的答复标记为答案; 但是,从封装,可重用性和DRY主要角度来看,我认为这是MVC框架的一个严重弱点.
我的观点与webforms的状态无关.
请允许我解释一下:
在webforms中,您可以100%将复杂功能封装在ascx控件中,当然还有相关的classlib DLL.一(1)名开发人员可以花费数周时间开发它.一旦他的工作完成,没有人需要知道任何关于它的事情并且只是使用它.用户控件可以在许多页面中重用,而不会使其他"开发人员用户"在ascx组件中发生详细活动.
相比之下,对于ascx partial需要与用户交互的ASP.NET MVC,你永远无法做到这一点.一旦ascx需要交互,它需要它自己的控制器,控制器需要保留ModelState.
Jeremy Skinner在MVCContrib中介绍了[ModelStateToTempData]:http: //www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ 但是,这只是一个补丁.
一个好的框架应该允许开发人员100%封装他们的工作 - 在控件,部分,ascx或其他任何东西 - 并将其交给团队的其他成员,以便他们可以"只使用它"而不需要知道任何数据.Winform在许多复杂场景中完美地实现了这一点.
任何欢迎.
我不知道我是否能 100% 解决你的问题,但你不能只向 UserControl 提供你需要的数据吗?
传入一个 <%= Url.Action() %>,单击时提交将转到该位置。如果您希望页面重定向回您所在的同一页面,您可以重定向并重新保存您的 ModelState ( http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc -best-practices-part-1.aspx提示 #13)。重定向可以通过引用者或通过将操作和控制器名称发送到您的操作方法来完成。
如果这不起作用,您可以随时使用 Ajax 吗?
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |