如何在MVC中使用强类型视图绑定一个模型来创建下拉列表和第二个模型文本框?

时间:2017-03-28 02:32:22

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

第一个模型:

public class VehicleMake
{
    [Key]
    public int MakeId { get; set; }
    public string Make { get; set; }
}

第二模特:

public class VehicleModel
{
    [Key]
    public int ModelId { get; set; }
    public string Model { get; set; }
    public DateTime Year { get; set; }
    public int MakeId { get; set; }
    public VehicleMake VehcileMake { get; set; }
}

如何将两个模型作为强类型视图传递。

我的观点有1)一个下拉列表,它绑定了来自VehicleMake类的make和makeid 2)一个文本框作为模型,从vehicleModle类

绑定

请建议如何使用多个模型创建视图?

@model MvcApplication1.Data.ViewVMModel
....
<h2>CreateModel</h2>
<table>
    <tr>
        <td>@Html.Label("Select Make")</td>
        <td>@Html.DropDownListFor(model=>model.VehicleMake,new SelectList(Model. "MakeId","Make")))</td>
    </tr>
    <tr>
      <td>Enter Model </td>
        <td>@Html.TextBoxFor(model=>model.VehcileModel)</td>
    </tr>
</table>

2 个答案:

答案 0 :(得分:0)

您正在编辑数据,因此第一步是创建视图模型(根据需要添加其他验证属性)。

public class VehicleVM
{
    [Required(ErrorMessage = "...")]
    public string Model { get; set; }
    [Required(ErrorMessage = "...")]
    public DateTime? Year { get; set; } // make nullable to protect against under-posting attacks
    [Required(ErrorMessage = "...")]
    [Display(Name = "Make")]
    public int? SelectedMake { get; set; }
    public IEnumerable<SelectListItem? MakesList { get; set; }
}

并在GET方法中,初始化视图模型的实例,填充它并将其传递给视图

var makes = db.VehicleMakes; // get the Makes from the database
VehicleVM vehicle = new VehicleVM()
{
    MakesList = new SelectList(makes, "MakeId", "Make")
};
return View(vehicle);

并在视图中

@model VehicleVM
....
@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.SelectedMake)
    @Html.DropDownListFor(m => m.SelectedMake, Model.MakesList)
    @Html.ValidationMessageFor(m => m.SelectedMake)

    @Html.LabelFor(m => m.Model)
    @Html.TextBoxFor(m => m.Model)
    @Html.ValidationMessageFor(m => m.Model)

    ....

将发回

public ActionResult Create(VehicleVM vehicle)

答案 1 :(得分:0)

您的Viewmodel应该是这样的

public VehicleModel VehicleModel { get; set; }
public List<VehicleMake> VehcileMakeList { get; set; }

并在您的视图中

@model MvcApplication1.Data.ViewVMModel
....
<h2>CreateModel</h2>
<table>
    <tr>
        <td>@Html.Label("Select Make")</td>
        <td>@Html.DropDownListFor(model=>model.VehicleModel.MakeId ,new SelectList(Model.VehcileMakeList, "MakeId","Make")))</td>
    </tr>
    <tr>
      <td>Enter Model </td>
        <td>@Html.TextBoxFor(model=>model.VehcileModel.Model)</td>
        <td>@Html.TextBoxFor(model=>model.VehcileModel.Year )</td>

    </tr>
</table>

并在你的行动中

ViewVMModel vm = new ViewVMModel();
vm.VehcileMakeList =  //get list of make 
vm.VehicleModel = new VehicleModel();
return view(vm);