برنامه نویس وب


ﺳﻪشنبه 29 آبان
MVC

نمایش داده به همراه یک لیست با ViewModel

دوشنبه, 27 اردیبهشت 1395

در برنامه های mvc ما فقط می توانیم یک نوع مدل به ویو پاس بدهیم و موقع submit شدن فرم هم فقط یک نوع مدل می توانیم سمت کنترلر بگیریم، این محدودیت خیلی اوقات ممکن است برای ما مشکل زا باشد.

مثلا فرض کنید ما دو جدول داریم که با هم ارتباط یک به چند دارند یعنی کلید اصلی یکی کلید خارجی دیگریست و برای نمایش و ثبت و ویرایش نیاز است که اطلاعات هر دو جدول را در ویو نمایش و به صورت همزمان ثبت و ویرایش شوند. برای اینکار ما از ویو مدل ها استفاده می کنیم.

من در اینجا از دو جدول استفاده می کنم به نام های Orders و OrderDetails که این دو جدول را در عکس زیر مشاهده می کنید.


جدول Order و OrderDetails

خوب حالا موقع ساختن کلاس ViewModel مان است که شامل یک Order  و تعدادی OrderDetail می باشد.


    public class OrderViewModel
    {
        public Orders order { get; set; }
        public List<OrderDetails> orderDetails { get; set; }
    }


کدهای سمت کنترلر و ویو برای نمایش آن به صورت زیر است که فکر نمی کنم توضیح خاصی نیاز داشته باشه


        public ActionResult ShowOrder(int id)
        {
            var o = db.Orders.Find(id);
            var od = db.OrderDetails.Where(p => p.OrderID == id).ToList();
            OrderViewModel model = new OrderViewModel()
            {
                order = o,
                orderDetails = od
            };
            return View(model);
        }


@model WebApplication.Models.OrderViewModel


<div>
    <
h4>Order</h4>
    <
hr />
    <
dl class="dl-horizontal">
        <
dt>
            @Html.DisplayNameFor(model => model.order.OrderDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.order.OrderDate)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.order.OrderPrice)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.order.OrderPrice)
        </dd>

    </dl>
</
div>
<br />
<
h4>OrderDetails</h4>
<
hr />
<
table class="table">
    <
tr>
        <
th>
            تعداد
        </th>
        <
th>
            قیمت
        </th>
        <
th></th>
    </
tr>
    @for (int i = 0; i < Model.orderDetails.Count; i++)
    {
        <tr>
            <
td>
                @Html.DisplayFor(modelItem => Model.orderDetails[i].Count)
            </td>
            <
td>
                @Html.DisplayFor(modelItem => Model.orderDetails[i].Price)
            </td>
            <
td>
                @Html.ActionLink("Edit", "Edit", new { id = Model.orderDetails[i].OrderDetailID }) |
                @Html.ActionLink("Details", "Details", new { id = Model.orderDetails[i].OrderDetailID }) |
                @Html.ActionLink("Delete", "Delete", new { id = Model.orderDetails[i].OrderDetailID })
            </td>
        </
tr>
    }

</table>

 




نظرات

Drag to order
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
نظر تایید شده ای برای این مطلب وجود ندارد .