我有一个非常基本的 Web 应用程序,显示表格的内容。用户可以通过单击链接来更改一些参数。 为了简化起见,我们只考虑一个简单的问题,即用于对行进行排序的列的名称。
用户可以单击该列或从右侧边栏中选择该列的名称来更改顺序。
我用<option>
元素显示可用列名称的列表。
直接从 Model
获取这些名称是否正确?反对或者我应该以某种方式从 Controller
传递它们?这是现在的代码
<select>
@{
// get list of all properties names
List<string> EtlProceduresNames = (((new MIPortal.Models.EtlProcedure()).GetType().GetProperties()).Select(item => item.Name)).ToList();
// display an option item for each property name
foreach (string EtlProceduresName in EtlProceduresNames) {
<option value=@EtlProceduresName >@Html.DisplayName(EtlProceduresName)</option>
}
}
</select>
这样View
直接与Model
互动。这是一个概念错误吗?我应该将该代码放在 Controller
上吗?然后将名单存储在ViewBag
上对象?
最佳答案
您不应该直接从 View 访问模型,因为这违反了 MVC 模式(关注点分离),并且您也不应该将此数据放入 View 包中。
View bag 应该只用于传递最简单的事情,而不是当你有充满数据的对象时。
考虑使用 Viewmodel,这是编码 ASP.NET MVC 的最佳方式。
这样的例子 -
http://www.codeproject.com/Articles/826417/Advantages-of-ViewModel-in-MVC-Model-View-Controll
关于c# - MVC View 直接与模型交互 - 好还是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400565/