#asp.net-mvc-3 #razor
#asp.net-mvc-3 #razor
Вопрос:
Учитывая следующий код, как я могу выбрать элемент списка в моем представлении, чтобы получить имя через идентификатор? Я просто хочу получить значение имени из списка через локальную переменную @id, которая сопоставляется с диапазоном идентификаторов списков.
Это действительно не имеет ничего общего с выпадающими списками…возможно, selectlist — неправильный контейнер для ассоциативных поисковых словарей?
— Контроллер
ViewBag.TypeId = new SelectList(db.TypeIds, "TypeId", "Name");
— Просмотр
@* ??? Get the name by a local @id *@
<div>ViewBag.TypeId.SelectItemNameById(@id)</div> @* Bad psuedo code here... *@
Ответ №1:
Я буду использовать Jquery с вызовом ajax в onChange
вашем выпадающем списке.
$(document).ready(function () {
$("#MyDrop").change(function () { GetValue("#MyDrop"); });
});
function GetValue(objSource) {
var url = '/Home/Index/GetValue/';
$.getJSON(url, { id: $(objSource).val() }, function (data) {
//with data returned fill your fields
});
});
}
Из контроллера
public ActionResult GetValue(string id)
{
int intId = 0;
int.TryParse(id, out intId);
var myData = //Get the value from Id
return Json(myData, JsonRequestBehavior.AllowGet);
}
Помните, что нужно использовать AllowGet
, если вы не выполняете Post
вызов из своего ajax (как в моем примере)
ОБНОВИТЕ, чтобы отразить комментарии
Для достижения того, что вам нужно, используйте словарь, переданный через ViewBag.
Затем из вашего представления вы получаете доступ к (словарному) ViewBag.MyDictionary. Или любую другую коллекцию, которую вы предпочитаете.
Комментарии:
1. Я должен был быть более ясным. Мне просто нужно удалить это связанное значение [id]= [name], и я подумал, что список будет чем-то простым для передачи, который имеет ассоциативный доступ 0 (1), например, словарь / коллекция. Все, что мне нужно сделать, это получить идентификатор и посмотреть его в списке, списке выбора или коллекции / хэше, но на самом деле не был уверен, как это сделать. На самом деле это не имеет ничего общего с выпадающими списками.
2. Если на этот раз я правильно понял, я буду использовать Dictionary<int, string>, переданный через ViewBag . Затем из вашего представления вы получаете доступ к (Dictionary<int, string>)ViewBag . MyDictionary. Или любой другой вариант, который вы предпочитаете.
3. Да, это сработало нормально: db.TypesIds. ToDictionary(x => x.Id , x => x.Name ); Спасибо!