Как передать список выбора и использовать ассоциативный выбор, чтобы получить имя из идентификатора?

#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 ); Спасибо!