0

ドロップダウン リストから選択した項目の値を取得できません。

投稿したコードの量が多くて申し訳ありませんが、非常に読みやすいコードです。

車両を編集すると、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);
}

そして私の見解 //View @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>
4

1 に答える 1

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

 };

それが役立つことを願っています。

于 2013-08-25T23:42:53.840 に答える