1

我想在我的视图中检索表格的一个单元格中的多个项目。我有几个模型,产品、包(作为类别)、订单和订单详细信息。我认为要实现我想要的,我应该使用来自我的模型的数据创建一个视图模型,但我真的不知道如何做到这一点以及我应该绑定哪些数据。

这是我的看法

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.OrderId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Username)          
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ClientID)          
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SiteNumber)
        </td>   
        <td>
            @if (item.Pack == null)
            {
                    <ul>
                        @foreach (var tmp in item.????) //PRODUCT
                        { 
                           <li>Html.DisplayFor(modelItem => tmp.Name) </li>
                        } 
                    </ul>
            }
            else
            {                 
                    <ul>
                        @foreach (var tmp in item.????) //PACK
                        { 
                            <li>Html.DisplayFor(modelItem => tmp.Name) </li> 
                        } 
                    </ul>                       
            }
        </td>

        <td>
        @{
                if (item.Pack == null)
                {
                        <ul>
                            @foreach (var tmp in item.????)  // PRODUCT
                            { 
                                <li>Html.DisplayFor(modelItem => tmp.UnitPrice)
                               </li>
                            }
                        </ul>
                }
                else
                {                    
                        <ul>
                                @foreach (var tmp in item.????) //PACK
                                { 
                                    <li>
                                    @Html.DisplayFor(modelItem => tmp.UnitPricePack)
                                    </li>
                                }
                        </ul>
                }
}

        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Quantity)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Total)
        </td>        
        <td>
            @Html.DisplayFor(modelItem => item.OrderDate)
        </td>
    </tr>  

我希望我的桌子最后看起来像这样:

在此处输入图像描述

我的问题再次,我如何创建一个 ViewModel 来检索我的视图中的数据,并使其与我在 ma 表中的 @foreach 条件相匹配......我不知道我是否足够清楚......这篇文章跟随这个。实际上,我所做的一切都是错误的,我真的不知道如何设置我的视图模型,我需要绑定哪些数据以及如何绑定。感谢您的帮助,您的建议,我接受所有

4

2 回答 2

1

我建议使用“AutoMapper”,你可以试试

public class A{
 public string FirstName{get;set;}
}

public class B{
public string LastName{get;set;}
}

现在创建一个视图模式

public class VModel{
public string FirstName{get;set;}
public string LastName{get;set;}
}

以及您希望它们收敛的地方使用自动映射器,例如

Mapper.CreateMap<A,VModel>();
Mapper.CreateMap<B,VModel>();

var ObjectOfClassA= new A{FirstName="John"};
var ObjectOfClassB= new A{LastName="Smith"};

VModel _model = Mapper.Map<A,VModel>(ObjectOfClassA);
_model = Mapper.Map<B,VModel>(ObjectOfClassB);

像访问它

_model.FirstName;//should give you john
_model.LastName;//should give you smith
于 2012-09-07T09:29:52.683 回答
1

您不一定需要新的 ViewModel,Order 拥有您所需要的一切。您的模型将是一个订单列表。

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.OrderId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Username)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ClientID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SiteNumber)
        </td>
        <td>
            <ul>
                @foreach (var o in item.OrderDetails)
                {

                    if (o.Pack == null)
                    {
                    <li>@Html.DisplayFor(modelItem => o.Product.Name) </li> //PRODUCT
                    }
                    else
                    {

                    <li>@Html.DisplayFor(modelItem => o.Pack.Name) </li> // PACK

                    }
                }
            </ul>
        </td>
        <td>
                <ul>
                    @foreach (var o in item.OrderDetails)
                    {

                        if (o.Pack == null)
                        {
                        <li>@Html.DisplayFor(modelItem => o.UnitPrice) </li> //PRODUCT
                        }
                        else
                        {
                        <li>@Html.DisplayFor(modelItem => o.UnitPricePack) </li>  //PACK
                        }
                    }
                </ul>
        </td>
        <td>
            <ul>
                @foreach (var o in item.OrderDetails)
                {
                    <li>@Html.DisplayFor(modelItem => o.Quantity)</li>
                }
            </ul>
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Total)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.OrderDate)
        </td>
    </tr>  
}

根据您的更新进行更新:

您仍在尝试传递 orderdetails 集合而不是 order

而不是这个:

        var user = from m in db.OrderDetails
                   select m;

有这个(假设你有 Orders 表):

    public ActionResult Index(string searchSite, string searchString)
    {

        var user = from m in db.Orders
                   select m;

        if (!String.IsNullOrEmpty(searchString))
        {
            user = user.Where(s => s.ClientID.Contains(searchString));                
        }

        if (!String.IsNullOrEmpty(searchSite))
        {
            user = user.Where(c => c.SiteNumber.Contains(searchSite));
        }
            return View(user);
    }  
于 2012-09-07T10:12:15.817 回答