【问题标题】:Populate 2 or more tables in ASP MVC在 ASP MVC 中填充 2 个或更多表
【发布时间】:2009-04-14 14:00:43
【问题描述】:

我正在寻找一种在 MVC 中填充多个表的方法,因为该方法只允许我返回一个 ModelView 或者我不知道如何返回更多。我是否必须在控制器中构建表并存储到 ViewData 并在页面中显示 viewData?

编辑:对不起,我想我没有表达这个想法。关键是我想在页面中填充 2 个或更多数据表。

例如,如果我有一个客户并且该客户有 5 个联系人和 5 个地址,我想显示客户信息和 2 个包含联系人和地址的表。

for each p in modelview
{
"<td>" + p.Name + "</td>"
}


for each p2 in modelview2
{
"<td>" + p2.Product + "</td>"
}

【问题讨论】:

    标签: c# javascript asp.net-mvc


    【解决方案1】:

    ViewData 是一个字典;您可以在其中存储多个项目,只需通过:

    ViewData["foo"] -= ...
    ViewData["bar"] -= ...
    

    然后,您可以(单独)在视图中获取这些。另一种方法是声明一个封装两个属性的类型,并使用该类型的实例作为模型(和类型化视图)。就个人而言,我更喜欢简单的 key/cast 方法。

    【讨论】:

    • 对于简单地将数据获取到视图(列表/显示),我同意。但是,从视图(新/更新)获取数据时,这种方法并不总是最简单的。特别是,如果您已经有一个复合模型,请说具有相关联系人的用户。
    • foor 和 bar 值将是绑定数据表的 html 代码?
    • 否;它们是您放入其中的任何数据; view 创建 html,而不是控制器
    【解决方案2】:

    您可以返回多个模型,但它需要一个复合模型用于视图并且在绑定控制器参数时使用前缀。

    假设您有一个视图模型:

    public class VM
    {
       public FooClass Foo { get; set; }
       public BarClass Bar { get; set; }
    }
    

    然后在您的控制器中,您将拥有

    public ActionResult MyAction( [Bind(Prefix="Foo")]FooClass foo,
                                 [Bind(Prefix="Bar")]BarClass bar )
    {
       ...
    }
    

    在您看来,您会使用:

    <%= Html.TextBox( "Foo.Value" ) %>
    <%= Html.TextBox( "Bar.Name" ) %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多