Я пытаюсь отобразить 2 поля из моей модели INV_Locations
в SelectList: location_dept|location_room
или, например, IT|Storage
. Использование THIS поста я кусочкам ниже вместе с помощью ViewData
:Объединить 2 поля структуры Entity Framework в 1 SelectList?
INV_AssetsController - Edit() GET:
public async Task<ActionResult> Edit(int id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
INV_Assets iNV_Assets = await db.INV_Assets.FindAsync(id);
if (iNV_Assets == null)
{
return HttpNotFound();
}
ViewBag.History = GetHistoryByAssetId(id);
ViewData["Location_Id"] = new SelectList((from l in db.INV_Locations.ToList() select new { location_room = l.location_dept + "|" + l.location_room }), "location_room", null, null);
}
INV_AssetsController - Edit() HttpPost:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,Model_Id,Manufacturer_Id,Type_Id,Location_Id,Vendor_Id,Status_Id,ip_address,mac_address,note,owner,cost,po_number,description,invoice_number,serial_number,asset_tag_number,acquired_date,disposed_date,created_date,created_by,modified_date,modified_by")] INV_Assets iNV_Assets)
{
if (ModelState.IsValid)
{
iNV_Assets.modified_date = DateTime.Now;
iNV_Assets.modified_by = System.Environment.UserName;
db.Entry(iNV_Assets).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index", "Home");
}
ViewData["Location_List"] = new SelectList((from l in db.INV_Locations.ToList() select new { location_room = l.location_dept + "|" + l.location_room }), "location_room", null, null);
return View(iNV_Assets);
}
INV_Assets - Редактировать() Просмотр:
<span class="control-label col-md-2">Location:</span>
<div class="col-md-4">
@*@Html.DropDownList("Location_Id", null, htmlAttributes: new { @class = "form-control dropdown" })*@
@Html.DropDownListFor(model => model.Location_Id, (SelectList)ViewData["Location_List"], htmlAttributes: new { @class = "form-control dropdown", @id = "selectLocation" })
@Html.ValidationMessageFor(model => model.Location_Id, "", new { @class = "text-danger" })
</div>
Это близко, что делает (например.) Следующее в моем раскрывающемся списке:
{ location_room = IT|Server }
, { location_room = IT|Storage }
и т.д.
Кто-нибудь знает изменения синтаксиса мне нужно сделать для того, чтобы отображать только Соответствующая часть в списке выбора (IT|Server
)?
Спасибо, Стивен. Я думаю, что у меня может возникнуть проблема, связанная с этим по другому вопросу: https://stackoverflow.com/questions/29212337/cannot-create-edit-record-due-to-validation. В прошлом я пытался выпустить два раза, но мне не нравилось использовать одну и ту же модель для заполнения двух разных списков выбора на основе двух разных полей (и я не хочу создавать отдельные таблицы/модели только для двух полей?). В настоящее время это все работает, кроме флажка подтверждения, в раскрывающемся списке, несмотря на то, что был сделан «действительный» выбор. –
Я вижу, что вы приняли ответ на другой вопрос (который действительно относится к примечанию 2 выше), поэтому он принимает это сейчас. Но я все еще считаю, что вы делаете ужасный взлом, который даст вам будущие проблемы. Нет причин, по которым каскадные выпадения не будут работать. –