在MVC中隐藏/显示属性和订购属性

时间:2014-09-11 10:02:04

标签: c# asp.net-mvc asp.net-mvc-4

我即将将我们的软件从ASP.NET WebForms升级到.NET MVC。在整个网络上,它展示了如何基于模型创建视图,这很好。

在此项目中,用户可以隐藏模型的属性以生成适合他们的视图,而另一个网站中的另一个客户端则隐藏其他属性。

代码是完全相同的,但我想知道是否有一种方法可以轻松地根据条件隐藏/显示模型的属性,希望在我的视图中没有大量的IF语句。

示例 - 1客户端如何只能看到名称和城镇,而另一个客户端看到所有3个属性。只需要根据条件进行展示。

public class MyObject() {

    public property name { get; set; };
    public property town { get; set; };
    public property customText { get; set; }

    public MyObject() {}
}

注意:用户也可以确定这些属性的顺序,我可以轻松地执行此操作吗?

只是说创建单独的视图是不可能的。以上是具有属性的模型的一个非常简单的示例。我们的模型可以有大约100个属性,用户可以随时打开和关闭它们,因此它需要能够动态完成

有没有办法动态创建ViewModel?

提前致谢

3 个答案:

答案 0 :(得分:1)

创建Property类或类似内容并对数据进行适当建模:

public class Property
{
    public string Name {get;set;}
    public bool Visible {get;set;}
    public int Order {get;set;}
}

然后您的视图模型可能类似于您的示例:

public class ViewModel 
{        
    public Property Name {get;set;}
    public Property Town {get;set;}
    public Property CustomText {get;set;}
}

答案 1 :(得分:0)

您无法将多个模型绑定到您的视图。显然,您必须根据用户角色在视图中执行解决方法。 或者为每个用户角色创建一个单独的模型和视图。

答案 2 :(得分:0)

我一直致力于一个名为Dynamic MVC的项目。

http://dynamicmvc.com

它目前没有做你的要求。功能已经存在,它不会以您需要的方式暴露。但是,如果您感兴趣,我将添加功能,以便您可以传递要在查询字符串中显示的属性。最终,可自定义的动态视图将为您生成页面,无需任何编码。此外,属性的顺序将决定页面上的顺序。这适用于具有DynamicEntity属性的任何模型。

如果您有兴趣我可以在下一个版本中加入它,请告诉我。