dropdownlist返回值,而不是文本

时间:2013-04-07 13:54:43

标签: c# html-select

我是新手,可能会遗漏一些明显的东西。创建新的“航班”时,下拉列表会返回值,例如“2”,而不是所需的文本,例如“通讯”。断点和监视验证“FlightType”和“ViewBag”包含正确的信息。任何建议都是最受欢迎的。

型号:Flight.cs

public class Flight
{
    [Key]
    public int FlightID { get; set; }

    public int FlightTypeID { get; set; }
    public string FlightTypeEntry { get; set; }
}

型号:FlightType.cs

public class FlightType
{
[Key]
public int FlightTypeID { get; set; }
public string FlightTypeEntry { get; set; }
}

DAL:FlightInitializer.cs

var flighttypes = new List<FlightType
{
new FlightType { FlightTypeEntry = "Regular" },
new FlightType { FlightTypeEntry = "Comm" }
};
flighttypes.ForEach(e => context.FlightType.Add(e));
context.SaveChanges();

控制器:FlightController.cs

// GET: /Flight/Create
public ActionResult Create()
{
ViewBag.FlightVB = new SelectList(db.FlightType, "FlightTypeID",
    "FlightTypeEntry");
return View();
}

// POST: /Flight/Create
[HttpPost]
public ActionResult Create(Flight flight)
{
if (ModelState.IsValid)
  {
    db.Flight.Attach(flight);
    db.Entry(flight).State = EntityState.Modified;
    db.Flight.Add(flight);
    db.SaveChanges();
    return RedirectToAction("Index");
}

ViewBag.FlightTypeVB = new SelectList(db.FlightType, "FlightTypeID"
    "FlightTypeEntry");
return View(flight);

观看次数:Flight.Create.cshtml

<div class="editor-field">
  @Html.DropDownList(“FlightTypelID", <SelectList>)ViewBag.FlightTypeVB)
</div>

1 个答案:

答案 0 :(得分:0)

Create HttpPost上的Flight对象可能没有正确填充b / c下拉列表只会返回所选项的值 - 您的案例中的值是“FlightTypeID”。如果要更改它以返回文本值“FlightTypeEntry”,则可以更改

ViewBag.FlightVB = new SelectList(db.FlightType, "FlightTypeID", "FlightTypeEntry");

ViewBag.FlightVB = new SelectList(db.FlightType, "FlightTypeEntry", "FlightTypeEntry");

我不确定这会是一件好事。无论哪种方式,它都不会完全填充回发后的Flight对象。为此,您可能希望对输入的flightID使用隐藏字段,并找出与“FlightTypeValue”对应的“FlightTypeID”,反之亦然。