Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何使用ViewBag MVC在视图中绑定Linq多个模型数据?_Asp.net Mvc_Linq_Asp.net Mvc 4_Viewbag - Fatal编程技术网

Asp.net mvc 如何使用ViewBag MVC在视图中绑定Linq多个模型数据?

Asp.net mvc 如何使用ViewBag MVC在视图中绑定Linq多个模型数据?,asp.net-mvc,linq,asp.net-mvc-4,viewbag,Asp.net Mvc,Linq,Asp.net Mvc 4,Viewbag,我正在使用LINQ连接多个模型类,并使用ViewBag将LINQ对象传递到View 我在重复数据或绑定数据时遇到问题 模型属性: public class SalesModel { public string CustomerName { get; set; } public int SSN { get; set; } public int LicenseId { get; set; } public int Age { get; set; } publi

我正在使用
LINQ
连接多个模型类,并使用
ViewBag
LINQ
对象传递到
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>

名称
年龄
城市
制作
模型
年
销售日期
@foreach(变量v在()ViewBag.vehicleSalesDetails中)
{
@v、 名字
@v、 年龄
@v、 城市
@v、 模型
@v、 年
@v、 销售日期
}

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);
}
我解决了我的问题

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);

        }
公共类车辆保存和详细信息
{
公共销售模型_salesmodele{get;set;}
public IEnumerable\u SalesDetailsTable{get;set;}
}
公共行动结果车辆保存和详细信息()
{
var make=objVehicleContext.VehicleMakes;
SalesModel objSalesModle=新SalesModel()
{
MakesList=新的选择列表(make,“MakeId”,“make”)
};
VehicleDataContext objDataContext=新VehicleDataContext();
IEnumerable vehcileSalesDetails=来自objDataContext.Vehiclesales中的VS
在VS.ModelId等于VModel.ModelId的objDataContext.VehicleModels中加入VModel
在objDataContext中加入Cus。VS.customerId上的客户等于Cus.customerId
在VModel.MakeId等于VMake.MakeId的情况下,在objDataContext.VehicleMakes中加入VMake
选择新的SalesDetailsTable
{
CustomerName=Cus.CustomerName,
年龄=核心年龄,
城市,
LicenseId=Cus.licensseId,
MakeName=VMake.Make,
ModelName=VModel.Model,
//=V型号年份,
SaleDate=VS.SaleDate
};
VehiclesSaveAndDetails obj=新车辆SaveandDetails();
obj._salesModle=objsalemodle;
obj._SalesDetailsTable=vehcileSalesDetails;
返回视图(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>



}
@model mvcapapplication1.Models.vehicles保存和详细信息
@{
ViewBag.Title=“车辆保存和死亡”;
}
车辆行驶和死亡
$(文档).ready(函数(){
//下拉列表Selectedchange事件
$('#ddlMake')。更改(函数(){
//$(“#ddlModel”).empty();
$.ajax({
类型:“POST”,
url:“/iRateBook/FillModel”,
数据类型:“json”,
传统的:是的,
数据:{makeId:$(this.val()},
成功:功能(数据){
//警报(“hello”+data.Model[0]);
$(“#ddlModel”).empty();
$.each(数据,函数(i,数据){//使用json结果绑定下拉列表
$('',
{
值:data.ModelId,
文本:data.Model
}).html(data.CityName).appendTo(“#ddlModel”);
});
},
错误:函数(ex){
警报(“检索状态失败”。+ex);
}
});
返回false;
})
});
@{
ViewBag.Title=“CreateVehicleSalesView”;
}
CreateVehicleSalesView
@使用(Html.BeginForm(“SaveVehcileSales”、“iRateBook”))
{
客户名称:
@Html.TextBoxFor(m=>m.u salesmodel.CustomerName)
SSN
@TextBoxFor(m=>m.\u salesmodel.SSN)
许可证号码
@Html.TextBoxFor(m=>m.\u salesmodel.LicenseId)
年龄:
@TextBoxFor(m=>m.u salesmodel.Age)
城市:
@Html.TextBoxFor(m=>m.\u salesmodel.City)
选择制作:
@Html.DropDownListFor(m=>m.\u salesModle.SelectedMake,Model.\u salesModle.MakesList,new
{
@id=“ddlMake”
})
选择模型
@DropDownListFor(m=>m._salesModle.SelecteModle,new List(),new{@id=“ddlModel”})


名称 年龄 城市 制作 模型 销售日期 @foreach(模型中的var v.\u SalesDetailsTable) { @v、 客户名称 @v、 年龄 @v、 城市 @v、 化名 @v、 型号名称 @v、 销售日期 } }
使用这8个属性创建视图模型,然后使用
选择新的MyViewModel{