我正在寻找POEAA
我有一个标准的ASP.NET MVC View,有大量的输入控件。根据来自2个主要下拉控件的输入触发控件的可见性。例如值为A的DropDown1和值为B的DropDown2将仅显示完整列表中的少数控件,并且还将更改强制要求。
我应该如何设计视图?
根据DropDown组合编写java脚本并隐藏/取消隐藏。可以有30种组合,因此管理新控件和组合可能具有挑战性
在数据库中创建一个表,该表将为每个组合提供一个控件ID列表,然后在客户端循环通过它来隐藏/取消隐藏?
有人可以建议的其他模式吗?目标是保持清洁和易于管理
真实世界示例
处理房产列表表单。根据选定的属性类型和转换类型,隐藏/显示控件。
例如卧室和浴室不适用于地块/土地。有二十几个这样的控件,其可见性需要根据属性类型/事务类型组合进行管理。
列表可以增长......
谢谢, Pinakin
答案 0 :(得分:3)
我建议通过实现MVVM模式来寻找更具反应性的方法,并建议将knockout.js视为将模型绑定到控件及其属性的方法,以便更改模型将产生超出价值正在改变。
希望这会给你一些关于如何前进的想法,但我支持我的原始评论,期待重新评估你如何呈现用户界面。单个视图上的30个控件太多了。把它分解成更小的块,如果你很难管理那么它对用户来说也很难。
答案 1 :(得分:2)
对于基于Web的应用程序,您应该寻求尽可能将任何复杂的输入屏幕分解为最不复杂的视图,主要是从用户的角度来看。
例如,不要修改一个整体选项页面,而是让下拉组合将浏览器指向特定于该组合的页面/视图。
您将获得许多特定页面/视图,但您将获得许多优势:
用户未看到 从根本上改变可能的网页 混淆他们
较不复杂的页面会导致较低的页面 部分问题的机会 页面加载
您的网页/视图已封装:您 知道任何变化只会影响 那个组合
可以通过使用包含/用户控件和公共代码块来最小化重复,以使代码尽可能保持干净。
答案 2 :(得分:1)
如何使用属性类型和事务类型作为操作方法参数,然后根据这些参数显示不同的视图?然后,您可以根据上下文将生成的表单发回到不同的操作,这将使验证变得容易。我认为这是一种非常易于维护的方法。 (当然,您仍然可以添加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表单。
这是一种可能的方法,有利于将单一的,巨大的形式转变为几个更小,更专业的形式。