我在找一个POEAA
我有一个标准的ASP.NET MVC视图和大量的输入控件。控件的可见性是根据来自2个主下拉控件的输入触发的。例如,值A的DropDown1和值B的DropDown2将只显示完整列表中的几个控件,并且还将更改强制要求。
我该如何设计风景?
真实世界示例
正在处理一份房产挂牌表。基于选定的属性类型和超越类型,控件将被隐藏/显示。
例如,卧室和浴室不适用于地块/土地。有20多个这样的控件,它们的可见性需要基于属性类型/事务类型组合来管理。
名单会增加..。
谢谢你,皮纳金
发布于 2011-07-05 11:46:03
我建议通过实现MVVM模式来考虑一种更被动的方法,并建议将knockout.js作为将模型绑定到控件及其属性的一种方法,这样更改模型将产生超出正在更改的值的效果。
希望这将给你一些关于如何前进的想法,但我坚持我最初的评论,期待重新评估你是如何呈现用户界面的。一个视图上的30个控件太多了。把它分解成更小的块,如果你很难管理,那么它对用户也是很难的。
发布于 2011-07-05 11:57:29
对于基于web的应用程序,您应该希望将任何复杂的输入屏幕分解为尽可能不复杂的视图,主要是从用户的角度。
例如,与其修改一个单一选项页,不如让下拉组合将浏览器指向特定于该组合的页/视图。
您最终将获得许多特定的页面/视图,但您将拥有以下几个优点:
通过使用包含/用户控件和公共代码块,可以尽量减少重复,以尽可能保持代码的干爽。
发布于 2011-07-05 11:58:04
如何使用属性类型和事务类型作为操作方法参数,然后根据这些参数显示不同的视图?然后,您可以根据上下文将结果表单回发到不同的操作,这将使验证变得容易。我认为这是一种相当可维护的方法。(当然,您仍然可以添加UX改进,例如通过AJAX加载视图,而不是完全重定向。)
您可以为不同场景的视图模型创建一个公共基类,并使用EditorForModel助手为每个派生类型显示适当的表单。
public abstract class PropertyViewModelBase { ... }
public class ApartmentForRentViewModel : PropertyViewModelBase { ... }
public class LandForSaleViewModel : PropertyViewModelBase { ... }然后在你的控制器里:
[HttpGet]
public ActionResult AddProperty(int propertyType, int transactionType)
{
PropertyViewModelBase viewModel = // Perhaps a factory that returns an
// empty instance of the proper type?
return View(viewModel);
}在(强类型)视图中的某个位置:
@model MyApp.Models.PropertyViewModelBase
[...]
@Html.EditorForModel()您必须为每种派生类型的PropertyViewModel定义编辑器模板(部分视图)。如果希望根据属性类型+事务类型将表单张贴到不同的操作方法,请将整个HTML表单包含在编辑器模板中。
这是一种可能的方法,它的好处是把单一的、巨大的形式转变成几种更小、更专业的形式。
https://stackoverflow.com/questions/6581499
复制相似问题