Два идентичных оператора @ Html.DropDownList отображают разные HTML. Второй работает нормально, но первый всегда возвращает значение по умолчанию, независимо от того, что было выбрано.
Статистика @ Html.DropDownList представлена в следующем коде:
<div class="form-group">
@Html.LabelFor(model => model.UnidadeId, "Unidade", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("UnidadeId", (SelectList)ViewBag.UnddId, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UnidadeId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UnidadeConsumoId, "Unidade de Consumo", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("UnidadeConsumoId", (SelectList)ViewBag.UndConsId, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UnidadeConsumoId, "", new { @class = "text-danger" })
</div>
</div>
И HTML-код, который он отображает:
<div class="form-group">
<label class="control-label col-md-2" for="UnidadeId">Unidade</label>
<div class="col-md-10">
<select class="form-control" id="UnidadeId" name="UnidadeId">
<option value="1">cx</option>
<option value="2">pc</option>
<option selected="selected" value="3">kg</option>
<option value="4">mt</option>
<option value="5">rl</option>
<option value="6">ml</option>
<option value="8">na</option>
<option value="9">hr</option>
<option value="10">un</option>
<option value="11">lt</option>
</select>
<span class="field-validation-valid text-danger" data-valmsg-for="UnidadeId" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="UnidadeConsumoId">Unidade de Consumo</label>
<div class="col-md-10">
<select class="form-control" data-val="true" data-val-number="The field Unidade de Consumo must be a number." data-val-required="The Unidade de Consumo field is required." id="UnidadeConsumoId" name="UnidadeConsumoId">
<option value="1">cx</option>
<option value="2">pc</option>
<option value="3">kg</option>
<option value="4">mt</option>
<option value="5">rl</option>
<option value="6">ml</option>
<option value="8">na</option>
<option value="9">hr</option>
<option selected="selected" value="10">un</option>
<option value="11">lt</option>
</select>
<span class="field-validation-valid text-danger" data-valmsg-for="UnidadeConsumoId" data-valmsg-replace="true"></span>
</div>
</div>
Чтобы хранить всю информацию вместе, список генерируется:
ViewBag.UnddId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeId);
ViewBag.UndConsId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeConsumoId);
Где Unidade:
public class Unidade
{
public int UnidadeId { get; set; }
public string Apelido { get; set; }
public string Descricao { get; set; }
}
Как видно, оператор "select" отличается, как и результаты. Первый выпадающий список возвращает только значение по умолчанию, а второе возвращает выбранное значение ... Я не могу понять, что происходит ... Заранее спасибо!
GET-код:
public ActionResult Edit(int? id)
{
Insumo insumo = db.Insumos.Find(id);
if (insumo == null) return HttpNotFound();
ViewBag.UnddId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeId);
ViewBag.UndConsId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeConsumoId);
return View(insumo);
}