none
Как в MVC заполнить DropDownList данными из связанной таблицы? RRS feed

  • Вопрос

  • В проекте MVC подключена модель LINQ, в которой находятся связанные таблицы (Request и ARMs, в Request поле arm - ID ARMs).

    Требуется во view Edit для Request создать DropDownList, заполненный из таблицы ARMs, а в контролере обработать выбранный элемент и записать в поле Request ID выбранного ARMs.

    Как это реализовать?

Ответы

  • Доброго времени суток

    Могу предложить такое решение

    в контроллере забираем все ARM

     



    ViewData["ARMS"] = ent.ARM.ToList();


     

    а в View делаем следующее

     



    <%= Html.DropDownListFor(model => model.arm, new SelectList((List<MyNamespace.Models.ARM>)ViewData["ARMS"], "id", "title"))%>


     

    где model -обьект типа Request

    "id" - название поля для значение value

    "title" - название поля из ARM, которе носит какое-то текстовое описание

    • Помечено в качестве ответа I.Vorontsov 12 июля 2010 г. 8:41
    8 июля 2010 г. 11:08
  • public class ModelRequest
    {
    public int requestId{get;set}//индентификатор реквеста
    public int arm{get;set;}
    public SelectList armlist{get;set;}
    /* и так далее все что надо для редактирования реквеста*/
    }
    public class Mycontroller:Controller
    {
    Linqtosql linqtosql=new Linqtosql(/*коннекшен стринг*/);
    public ActionResult Edit(int id)//так как идет редактирование
               //вызываем нужный реквест по 
               //его ид
    {
    ModelRequest model=new ModelRequest();
    var request=linqtosql.table_request.First(x=>x.Id==id);
    /*тоесть дергаем из базы нужный нам реквест я написал через линку и напрямую без рассмотрения репозитория*/
    var _arm=linqtosql.table_arm.Orderby(x=>x.Id);
    /*все названия полей пишу абстрактно сверься с базой*/
    model.requestId=request.Id;
    model.arm=request.arm;
    model.armlist=new SelectList(_arm,"id", "Title", request.arm);
    /*...заполняем полностью модель...*/
    return View(model);
    }
    
    }

    во вьюхе пишешь

    <%= Html.DropDownListFor(m=>m.arm, Model.armlist)%>
    ну и в пост прилетит уже нужный ид арма в значение arm

    • Помечено в качестве ответа I.Vorontsov 12 июля 2010 г. 8:41
    8 июля 2010 г. 22:03

Все ответы

  • Доброго времени суток

    Могу предложить такое решение

    в контроллере забираем все ARM

     



    ViewData["ARMS"] = ent.ARM.ToList();


     

    а в View делаем следующее

     



    <%= Html.DropDownListFor(model => model.arm, new SelectList((List<MyNamespace.Models.ARM>)ViewData["ARMS"], "id", "title"))%>


     

    где model -обьект типа Request

    "id" - название поля для значение value

    "title" - название поля из ARM, которе носит какое-то текстовое описание

    • Помечено в качестве ответа I.Vorontsov 12 июля 2010 г. 8:41
    8 июля 2010 г. 11:08
  • public class ModelRequest
    {
    public int requestId{get;set}//индентификатор реквеста
    public int arm{get;set;}
    public SelectList armlist{get;set;}
    /* и так далее все что надо для редактирования реквеста*/
    }
    public class Mycontroller:Controller
    {
    Linqtosql linqtosql=new Linqtosql(/*коннекшен стринг*/);
    public ActionResult Edit(int id)//так как идет редактирование
               //вызываем нужный реквест по 
               //его ид
    {
    ModelRequest model=new ModelRequest();
    var request=linqtosql.table_request.First(x=>x.Id==id);
    /*тоесть дергаем из базы нужный нам реквест я написал через линку и напрямую без рассмотрения репозитория*/
    var _arm=linqtosql.table_arm.Orderby(x=>x.Id);
    /*все названия полей пишу абстрактно сверься с базой*/
    model.requestId=request.Id;
    model.arm=request.arm;
    model.armlist=new SelectList(_arm,"id", "Title", request.arm);
    /*...заполняем полностью модель...*/
    return View(model);
    }
    
    }

    во вьюхе пишешь

    <%= Html.DropDownListFor(m=>m.arm, Model.armlist)%>
    ну и в пост прилетит уже нужный ид арма в значение arm

    • Помечено в качестве ответа I.Vorontsov 12 июля 2010 г. 8:41
    8 июля 2010 г. 22:03
  • А если необходимо вывести не только  Title но и другие данные (titel + artist)?

    Например, из таблицы

    id

    titel

    artist

    year

    29 апреля 2011 г. 8:25
  • ViewBag.Artists = new SelectList(
       ent.ARM.Select(w => new { id = w.id,
                                 desc = w.title + " " + w.artist + " " + w.year }), 
       "id",
       "desc");

    Возможно вы хотели так?

    а во вьюшке можно уже так:

    @Html.DropDownList("arm", ViewBag.Artists as SelectList)


    Mak Arti


    10 июня 2014 г. 10:26