1

ビューのテーブルの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>  

私のテーブルは最後にそのように見えるようにしたいと思います:

ここに画像の説明を入力してください

もう一度質問します。ビュー内のデータを取得し、maテーブル内の@foreach条件と一致するViewModelを作成するにはどうすればよいですか...十分に明確かどうかはわかりません...この投稿はこれに続きます。実際、私が行ったことはエラー時にエラーを返します。ビューモデルを設定する方法、バインドする必要のあるデータ、および方法がわかりません。あなたの助け、あなたのアドバイスをありがとう、私はすべてを取ります

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>  
}

更新に応じて更新します。

あなたはまだ注文の代わりに注文詳細のコレクションを渡そうとしています

これの代わりに:

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

これを持っている(あなたが注文テーブルを持っていると仮定して):

    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 に答える