c# - MVC View 直接与模型交互 - 好还是坏?

标签 c# asp.net-mvc model-view-controller

我有一个非常基本的 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/

相关文章:

c# - 在 wpf 网络浏览器中捕获和取消新窗口打开事件

javascript - 尝试使嵌套问题动态出现... C# ASP.Net 数据库 首先,

javascript - 将范围与侧面菜单绑定(bind)不起作用 - ionic

C# 在 foreach 循环中更新对象

C# - 在列表框中保存值

c# - 找不到与具有绑定(bind) WebHttpBinding 的终结点的方案 https 匹配的基址。注册的基址方案是 [http]

java - 这是在 Java 中处理事件的好方法吗?

html - ASP.NET MVC : ActionLink vs bare url

asp.net-mvc - ASP.NET MVC 中的路由问题

asp.net-mvc - ASP.NET MVC 约定