我无法从下拉列表中获取所选项目的值。
道歉我发布了多少代码,但这是非常简单的代码。
当我编辑车辆时,我的Get Edit方法返回车辆,下拉列表在视图中选择了正确的VehicleType。
但是
当我的[HttpPost] Edit重新获得模型时,VehicleType为null,其他字段,名称,描述都会正确更新。
我有一个名为Vehicle的类和一个名为VehicleType的类
public class Vehicle
{
public string Name { get; set; }
public string Description { get; set;
public virtual VehicleType VehicleType { get; set; }
}
public class VehicleType
{
public int VehicleTypeID { get; set; }
public string VehicleTypeDescription { get; set; }
}
在我的控制器中,我有一个get和set编辑方法
public ActionResult Edit(int id = 0)
{
Vehicle myVehicle = db.Vehicle.Find(id);
if (myVehicle == null)
{
return HttpNotFound();
}
PopulateVehicleTypeList(myVehicle.VehicleType.VehicleTypeID);
return View(myVehicle);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Vehicle myVehicle)
{
if (ModelState.IsValid)
{
db.Entry(myVehicle).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(myVehicle);
}
我的观点 //视图 @model Vehicle
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Vehicle</legend>
@Html.HiddenFor(model => model.VehicleID)
<div class="editor-label">
@Html.LabelFor(model => model.VehicleType.VehicleTypeDescription)
</div>
<div class="editor-field">
@Html.DropDownList("VehicleTypeID", String.Empty)
@Html.ValidationMessageFor(model => model.VehicleType.VehicleTypeID)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
答案 0 :(得分:1)
你应该做一些事情。 首先,创建一个具有Vehicles和VehicleTypes
的视图模型public class VehicleViewModel
{
public IEnumerable<SelectListItem> VehicleTypes { get; set; }
public Vehicle vehicle { get; set; }
}
其次,在您的视图中,更改为DropDownListFor:
@Html.DropDownListFor(
x => x.Vehicle.VehicleType,
Model.VehicleTypes,
"-- Select a vehicle type --", null)
你的控制器看起来像这样:
VehicleViewModel viewModel = new VehicleViewModel
{
Vehicle vehicle = <populate via Linq query>
VehicleTypes = VehicleTypes.Select(x => new SelectListItem
{
Value = x.VehicleTypeID,
Text = VehicleTypeDescription
}).ToList(),
vehicle = vehicle
};
希望有所帮助。