【问题标题】:How to bind Linq Multiple models data in a View using ViewBag MVC?如何使用 ViewBag MVC 在视图中绑定 Linq 多个模型数据?
【发布时间】:2017-04-07 04:40:54
【问题描述】:

我正在使用LINQ 加入多个模型类,并使用ViewBagLinq 对象传递给View

我在重复数据或绑定数据时遇到问题

模型属性:

public class SalesModel
{
    public string CustomerName { get; set; }
    public int SSN { get; set; }
    public int LicenseId { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
    //Vehicle Sales
    public DateTime? SaleDate { get; set; }
    public int CustomerId { get; set; }
    public int SelecteModle { get; set; }
}

public ActionResult CreateVehicleSalesView()
{
    var make = objVehicleContext.VehicleMakes;

    SalesModel objSalesModle = new SalesModel()
    {
        MakesList = new SelectList(make, "MakeId", "Make")
    };

    VehicleDataContext objDataContext = new VehicleDataContext();
    var vehcileSalesDetails = from VS in objDataContext.Vehiclesales
                              join VModel in objDataContext.VehicleModels on VS.ModelId equals VModel.ModelId
                              join Cus in objDataContext.Customers on VS.customerId equals Cus.customerId
                              join VMake in objDataContext.VehicleMakes on VModel.MakeId equals VMake.MakeId
                              select new
                              {
                                  Name = Cus.customerName,
                                  age = Cus.Age,
                                  city = Cus.City,
                                  licenseId = Cus.LicesnseId,
                                  make = VMake.Make,
                                  model = VModel.Model,
                                  year = VModel.Year,
                                  saleDate = VS.SaleDate


                              };
    ViewBag.vehicleSalesDetails = vehcileSalesDetails;                                         

    return View(objSalesModle);
}

查看: 绑定数据时遇到问题,如何在视图中调用 Linq 列名?

<table>
    <tr>
        <td>Name</td>
        <td>Age</td>
        <td>City</td>
        <td>Make</td>
        <td>Model</td>
        <td>Year</td>
        <td>Sale Date</td>
    </tr>
    @foreach (var v in ()ViewBag.vehicleSalesDetails)
    {
        <tr>@v.Name</tr>
        <tr>@v.Age</tr>
        <tr>@v.City</tr>
        <tr>@v.Model</tr>
        <tr>@v.Year</tr>
        <tr>@v.SaleDate</tr>
    }
</table>

【问题讨论】:

  • 使用这 8 个属性创建一个视图模型并使用 select new MyViewModel { Name = Cus.customerName, ......} 并将模型传递给视图(不使用 ViewBag

标签: asp.net-mvc linq asp.net-mvc-4 viewbag


【解决方案1】:

Viewbag 具有动态结构,我不建议您在 viewbag 中返回您的对象。动态维护很困难。

您可以将其他属性添加到您的 SalesModel 或创建新模型以返回视图,例如 VehicleSalesDetailModel。我建议创建一个新模型,例如:

public class SalesModel
{
    public string Name { get; set; }

    //Change XXX with Make's type
    public XXX Make {get;set;} 

    public int LicenseId { get; set; }

    public int Age { get; set; }

    public string City { get; set; }

    //Vehicle Sales
    public DateTime? SaleDate { get; set; } 

    public int Year{ get; set; }

}

在你的行动中:

 public ActionResult CreateVehicleSalesView()
 {
    var make = objVehicleContext.VehicleMakes;

SalesModel objSalesModle = new SalesModel()
{
    MakesList = new SelectList(make, "MakeId", "Make")
};


VehicleDataContext objDataContext = new VehicleDataContext();
VehicleSalesDetailModel vehcileSalesDetails = from VS in objDataContext.Vehiclesales
                          join VModel in objDataContext.VehicleModels on VS.ModelId equals VModel.ModelId
                          join Cus in objDataContext.Customers on VS.customerId equals Cus.customerId
                          join VMake in objDataContext.VehicleMakes on VModel.MakeId equals VMake.MakeId
                          select new VehicleSalesDetailModel
                          {
                              Name = Cus.customerName,
                              Age = Cus.Age,
                              City = Cus.City,
                              LicenseId = Cus.LicesnseId,
                              Make = VMake.Make,
                              Model = VModel.Model,
                              Year = VModel.Year,
                              SaleDate = VS.SaleDate


                          };
return View(vehcileSalesDetails);
}

【讨论】:

  • 好吧,那怎么样 -> return View(objSalesModle);我正在使用它来绑定下拉列表
【解决方案2】:

我解决了我的问题。

public class VehiclesSaveAndDetails
{
    public SalesModel _salesModle { get; set; }
    public IEnumerable< SalesDetailsTable> _SalesDetailsTable { get; set; }
}

        public ActionResult VehicleSaveAndDetails()
        {
            var make = objVehicleContext.VehicleMakes;

            SalesModel objSalesModle = new SalesModel()
            {
                MakesList = new SelectList(make, "MakeId", "Make")
            };

            VehicleDataContext objDataContext = new VehicleDataContext();

            IEnumerable<SalesDetailsTable> vehcileSalesDetails = from VS in objDataContext.Vehiclesales
                                                          join VModel in objDataContext.VehicleModels on VS.ModelId equals VModel.ModelId
                                                          join Cus in objDataContext.Customers on VS.customerId equals Cus.customerId
                                                          join VMake in objDataContext.VehicleMakes on VModel.MakeId equals VMake.MakeId
                                                                 select new SalesDetailsTable
                                                          {
                                                              CustomerName = Cus.customerName,
                                                              Age = Cus.Age,
                                                              City = Cus.City,
                                                              LicenseId = Cus.LicesnseId,
                                                              MakeName = VMake.Make,
                                                              ModelName = VModel.Model,
                                                              // = VModel.Year,
                                                              SaleDate = VS.SaleDate


                                                          };

            VehiclesSaveAndDetails obj = new VehiclesSaveAndDetails();
            obj._salesModle = objSalesModle;
            obj._SalesDetailsTable = vehcileSalesDetails;

            return View(obj);

        }

我的视图。

@model MvcApplication1.Models.VehiclesSaveAndDetails
@{
    ViewBag.Title = "VehicleSaveAndDeatils";
}

<h2>VehicleSaveAndDeatils</h2>
<script src="@Url.Content("~/Scripts/jquery-1.12.4.js")" type="text/javascript"></script>
<script src="~/Scripts/jquery-1.12.4.js"></script>
<script type="text/javascript"
        src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

<script type="text/javascript">

    $(document).ready(function () {
        //Dropdownlist Selectedchange event
        $('#ddlMake').change(function () {
           // $("#ddlModel").empty();
            $.ajax({
                type: "POST",
                url: "/iRateBook/FillModel",
                dataType: "json",
                traditional: true,
                data: { makeId: $(this).val() },
                success: function (data) {
                    //alert("hello"+data.Model[0]);

                    $("#ddlModel").empty();

                    $.each(data, function (i, data) {      // bind the dropdown list using json result
                        $('<option>',
                           {
                               value: data.ModelId,
                               text: data.Model
                           }).html(data.CityName).appendTo("#ddlModel");
                    });


                },
                error: function (ex) {
                    alert('Failed to retrieve states.' + ex);
                }
            });
            return false;
        })


    });

</script>


@{
    ViewBag.Title = "CreateVehicleSalesView";
}

<h2>CreateVehicleSalesView</h2>

@using (Html.BeginForm("SaveVehcileSales", "iRateBook"))
{
    <table>
        <tr>
            <td>Customer Name: </td>
            <td>@Html.TextBoxFor(m => m._salesModle.CustomerName) </td>
        </tr>
        <tr>
            <td>SSN</td>
            <td>@Html.TextBoxFor(m => m._salesModle.SSN)</td>
        </tr>
        <tr>
            <td>License Number</td>
            <td>@Html.TextBoxFor(m => m._salesModle.LicenseId)</td>
        </tr>
        <tr>
            <td>Age:</td>
            <td>@Html.TextBoxFor(m => m._salesModle.Age)</td>
        </tr>
        <tr>
            <td>City :</td>
            <td>@Html.TextBoxFor(m => m._salesModle.City)</td>
        </tr>
        <tr>
            <td>Select Make:</td>
            <td>
                @Html.DropDownListFor(m => m._salesModle.SelectedMake, Model._salesModle.MakesList, new
                    {
                        @id = "ddlMake"
                    })
            </td>
        </tr>
        <tr>
            <td>Select Model</td>
            <td>@Html.DropDownListFor(m => m._salesModle.SelecteModle, new List<SelectListItem>(), new { @id = "ddlModel" })</td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Save" /> </td>

        </tr>
    </table>

    <br />
    <br />
    <table>
        <tr>
            <td>Name</td>
            <td>Age</td>
            <td>City</td>
            <td>Make</td>
            <td>Model</td>
            <td>Sale Date</td>
        </tr>
        @foreach (var v in   Model._SalesDetailsTable)
        {
            <tr>
                <td>@v.CustomerName</td>
                <td>@v.Age</td>
                <td>@v.City</td>
                <td>@v.MakeName</td>
                <td>@v.ModelName</td>
                <td>@v.SaleDate</td>
            </tr>
        }
    </table>



}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多