【问题标题】:MVC 3 Dynamic ViewMVC 3 动态视图
【发布时间】:2012-05-12 18:13:17
【问题描述】:

我对 MVC (3) 相当陌生,并且正在构建一个应用程序,它将在整个过程中使用各种数据项的列表。

我可以为每个视图构建一个视图,但我认为每个视图都相似(带有数据列的 HTML 表)使用通用视图会更有意义。

控制器都使用 DAL 中的 Linq 来返回条目,例如

DAL

public List <MyObject> getAllEntriesOfSomeType()
{
    var myobjects = from r in db.something
                    where r.status ==1
                    select r;
    return myobjects.ToList();
}

控制器

MyObjectClass o = new MyObjectClass();

return View(o.getAllEntriesOfSomeType());

查看

在不与该对象绑定的视图中,我想动态显示列名和数据,例如

<thead>
    <tr>
        @int cols = 0;
        @foreach(c in Model.Columns)
        {
            <th>
                @cols+=1;
                @c.DisplayName
            </th>
        }
    </tr>
</thead>
<tbody>

@foreach(m in Model)
{
    <tr>
        @(int i = 1;i<=cols;i++)
        {
            <td>
                @m[i].Value
            </td>
        }
    </tr>
}
</tbody>

...

是否有任何(简单!)方法可以实现上述目标。我想过将模型转换为 DataTable,但似乎没有一个简单的方法(阅读一些关于 ObjectShredder 的内容)

【问题讨论】:

    标签: asp.net-mvc linq dynamic view


    【解决方案1】:

    MVC 确实是为您要显示/编辑的每组数据提供不同的视图。

    这样当事情发生变化时(而且它们会发生变化),您可以在不影响其他视图或页面的情况下更改视图或页面。

    也就是说,这并不意味着你不能对你正在做的事情很聪明。

    如果你说你的数据都非常相似,那么你会觉得它们都继承自同一个接口或基类型会有问题,对吧?

    喜欢:

    public class MyObjectClass : IMyObjectClassCommonStuff
    {  
    }
    

    然后在你的 partial 视图中(这样你就可以重复在不同页面上显示的数据),你可以像这样在你的视图中使用模型:

    @model IList<IMyObjectClassCommonStuff>
    

    然后,您可以像往常一样编写视图,引用界面中的公共字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多