应该在ASP.Net MVC中查看模型是否都是字符串?

时间:2009-07-10 07:16:17

标签: asp.net-mvc

我有点(无意中)我觉得在某些部分我在视图(.aspx)中做了太多,格式太多,连接太多,在一个地方有一些正则表达式替换。

我开始研究一个新的部分,并试图改进我的方法..然后它打我,为什么我不只是制作我的所有视图模型(在/ Models / in .Web项目中)字符串或列表推动的字符串。注意:我不是指我的模型/域,而是指我的ViewModel。

public class FinanceQuoteView
{
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase();
    public string Monthly; // rather than Monthly.ToString("C")
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString();
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No";
    public string[] Restrictions;
}

对于表单提交(添加编辑),我使用单独的视图模型来提供控制器操作(表单模型,如果您将在/ Models / Form中)。所以FinanceQuoteForm包含双打等...通过活页夹构建。

每个人都对这种方法有何看法?在从域到视图模型的映射中做.ToString(“C”)太多了吗?

4 个答案:

答案 0 :(得分:3)

您的模型应该生成正确的数据,然后由视图决定以所需的格式生成数据。如果您在模型之上构建了另一个视图,您可能希望对数据进行不同的操作,因此我建议 NOT 将它们作为模型中的字符串返回。

答案 1 :(得分:1)

对于我设计的View Models,我倾向于非常依赖于字符串。毕竟,View中显示的大多数数据都采用字符串的形式。每当我要在View(.aspx / .ascx)中执行数据操作时,我认真考虑将该逻辑推送到我的View Model,以便我可以对它进行单元测试。毕竟,Testability是你从MVC获得的主要好处,那么为什么不使用呢?

在WPF中(只是为了绕道而行)许多控件本身都能理解其他类型的数据(例如数字,布尔等),但是在一个平台上,因此固有地将字符串绑定为HTML,它就是对我来说,将大部分输出视为文本很有意义。

无论如何,所有数据都必须在服务器和浏览器之间进行往返编码,因此通常情况下,您只需要明确它。

我绝对不认为这太多了 - 我只觉得你可以做得太少了。)

答案 2 :(得分:1)

主要是同意。对于传统的编辑表单,我更喜欢为“post model”(传递给控制器​​)​​和view / edit“view model”(传递给视图)提供单独的模型。

帖子模型属性都是字符串。这允许我确定一个字段是否包含在帖子中,有些则不是,这对我的应用程序非常重要。

post模型提供我的控制器操作,然后确定要执行的命令(如果有的话)。

从那里,如果控制器动作导致查看视图/编辑页面,那么我相应地构建视图模型,并将其提供给视图。

因此,无论我想要什么类型,我都可以制作视图模型的属性。它们不必匹配帖子模型的类型。

超级干净,让我完全控制一切。

答案 3 :(得分:0)

您的情境接缝非常特殊并且在某种程度上受到限制:您的ViewModel可用于编辑或显示。大多数视图都做到了:它们有很多显示内容和一些编辑内容。让我们说这页:

显示问题,答案和备注。编辑:回答。

我不想区分2.它会以很多显示字段的重复结束。

我宁愿有一个可能有2个属性的视图:一个用于显示,一个用于表单值。