如何操作数据以显示适当的html布局asp mvc

时间:2016-11-16 19:27:17

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

我来自程序PHP背景。我试图学习如何做我以前在PHP中做的相同的事情,并在asp.net中做。我需要根据客户名称对我的订单进行排序。 现在我的布局是:

  • Sams Club
  • 订单1
  • Sams Club
  • 订单2
  • 沃尔玛
  • 订单1
  • 沃尔玛
  • 订单2
  • 沃尔玛
  • 订单3

我的布局更像是:

  • Sams Club
  • 订单1
  • 订单2

  • 沃尔玛

  • 订单1
  • 订单2
  • 订单3

我可以使用PHP轻松完成此操作,但我很难弄清楚如何在MVC类型的应用程序中执行此操作。 这就是我的cshtml页面的外观。

     <table class="table table-condensed" style="border-collapse:collapse;">
        <thead>
            <tr>
                <th><input type="checkbox" name="CheckOrders" />Select All </th>
                <th>Bill to Name</th>
                <th>Qty Ordered</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {    
                <tr data-toggle="collapse" data-target="#@Html.DisplayFor(model => item.customer_number)" class="accordion-toggle">
                    <td><input type="checkbox" name="checkAllCus" value="@Html.DisplayFor(model => item.customer_number)"/></td>
                    <td>
                        @Html.DisplayFor(model => item.Bill_to_Name)
                    </td>
                    <td> 
                        @Html.DisplayFor(model => item.Quantity_Ordered)
                    </td>
                </tr>
                <tr>
                    <td colspan="12" class="hiddenRow">
                        <div class="accordian-body collapse" id="@Html.DisplayFor(model => item.customer_number)">
                            <table class="table table-striped">
                                <thead>
                                    <tr>
                                       <th></th>
                                       <th>Order Number</th>
                                       <th>Bill to Name</th>
                                       <th>Qty Ordered</th>
                                       <th>Ship Date</th>
                                       <th>Item #</th>
                                       <th>Description</th>
                                       <th>State</th>
                                       <th>Carrier</th>
                                       <th>Details</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr>
                                        <td><input type="checkbox" name="orders[]" value="@Html.DisplayFor(model => item.order_no)" /></td>
                                        <td>
                                            @Html.DisplayFor(model => item.order_no)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.Bill_to_Name)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.Quantity_Ordered)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.Ship_Date)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.item_no)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.descr1)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.shipstate)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.shipper)
                                        </td>
                                        <td>
                                            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })
                                        </td> 
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </td>
                </tr>
            }
        </tbody>
    </table>

以下是我的模特

namespace OpenCustomerOrder3.Models
{
    using System;

    public partial class spOrderDetails_Result
    {
        public string cusNo;
        public string customer_number { get; set; }
        public string shipper { get; set; }
        public string user_def_fld_5 { get; set; }
        public string item_no { get; set; }
        public string descr1 { get; set; }
        public string location1 { get; set; }
        public string Bill_to_Name { get; set; }
        public Nullable<decimal> Quantity_Ordered { get; set; }
        public string Requested_Date { get; set; }
        public string Ship_Date { get; set; }
        public string Status { get; set; }
        public string order_no { get; set; }
        public string shipstate { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

这实际上归结为您的域模型的样子。

看起来目前传递给视图的模型类型只是IEnumerable<Order>或类似的。如果您真的必须这样做,那么实现目标的一种方法是使用CustomerName中的GroupBy方法按System.Linq分组您的订单。

但是,更好的模型是让客户模型有许多订单,即客户和订单之间存在1 .. *关系。例如,

public class Customer
{
    public string Name { get; set; }
    public IEnumerable<Order> Orders { get; set; }
}

然后你想要的是将IEnumerable<Customer>传递给你的观点。