2013-10-12 6 views
3

Я новый парень в ASP.NET MVC 4. Я хочу заполнить выпадающий список из таблицы базы данных BO, где имя столбца - Id, Code, Name, OrgId. Я хочу связать два данных Code & Name данных DataTextfield и столбца Id Данные для DataValueField выпадающего списка. Я создал код для этого, которые являются НО ЕГО НЕ ВОЗВРАЩАЕТСЯ DATA FROM TABLE и var BOList это остается пустым:ASP.NET MVC 4 Хотите заполнить выпадающий список из базы данных

my connectionstring is 


<add name="iRegDBContext" 
    connectionString="Data Source=****;Initial Catalog=iReg;User ID=**;Password=****;Integrated Security=True" 
    providerName="System.Data.SqlClient" 
/> 

Мой класс контроллера:

public class iRegController : Controller 
{ 
    private iRegDBContext l_oDbBO = new iRegDBContext(); 

    // GET: /iReg/ 

    public ActionResult PopulatejQgrid() 
    { 
     var BOList = l_oDbBO 
        .BO 
        .ToList() 
        .Select(d => new SelectListItem 
         { 
          Value = d.Id.ToString(), 
          Text = d.Name + "[ " + d.Code + " ]" 
         }); 
     ViewBag.BOData = new SelectList(BOList, "Value", "Text"); 
     return View(); 
    } 
} 

Мой класс Модель:

public class BO 
{ 
    public Guid Id { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

public class iRegDBContext : DbContext 
{ 
    public DbSet<BO> BO { get; set; } 
} 

Мой cshtml класс:

@model MvciReg.Models.BO 

@{ 
    ViewBag.Title = "PopulatejQgrid"; 
} 

@using (Html.BeginForm()) 
{ 
    <fieldset> 
     BO : 

     @Html.DropDownList("BOData") 
     <p> 
      <input type="submit" value="Go" /> 
     </p> 
    </fieldset> 
} 

Я действительно не знаю, где я ошибаюсь. Я разработал свой код со ссылкой на следующую ссылкуClick here. Просьба предложить исправление в коде ...

UPDATE: Я попытался следующий код Matt телесной в в моем контроллере и то, что я вижу код не извлекаются данные из базы данных и код

public ActionResult populatejQgrid() 
    { 
     ViewBag.BOData = GetDropDown(); 

     return View(); 
    } 

    public static List<SelectListItem> GetDropDown() 
    { 
     List<SelectListItem> ls = new List<SelectListItem>(); 
     var lm = from m in db.BOs //fetch data from database 
       select m; 
     foreach (var temp in lm) 
     { 
      ls.Add(new SelectListItem() { Text = temp.Name, Value = temp.Id.ToString() }); 
     } 
     return ls; 
    } 

В контроллере:

 @Html.DropDownList("BOData", (List<SelectListItem>)ViewBag.BOData) 

Но когда я увидел значение ls через часы всегда показывают me Count = 0, но это не дает мне никакой ошибки.

Я нашел что-то новое в этой проблеме. Когда я держал указатель мыши над var lm; он показывает мне запрос и в имени таблицы запросов в предложении FROM это не то, что в моей базе данных SQL. Мое имя таблицы SQL - BO, а в запросе - BOES. Я не знаю, откуда это имя. Я думаю, что это основная причина всей этой проблемы. Так, как я это преодолею?

+0

@ Html.DropDownList ("BOData"): он только что определили падение вниз Controll с именем. попробуйте использовать @ Html.DropDownListFor (m => m.Id, новый SelectList (ViewBag.BOData, «Значение», «Текст»)) в представлении – Miller

+0

Есть ли какое-либо правило, которое вы должны предоставить TableName для имени класса или класса DbContext имя???? – Rahul

+0

Вы используете EF/nhibernate? Код сначала? – Miller

ответ

0

Из того, что я вижу в вашем коде, вы создаете список выбора и устанавливаете ViewBag.BOData на контроллере. Поэтому для того, чтобы сделать его в поле зрения, вы должны сделать это вместо того, чтобы

@Html.DropDownList(ViewBag.BOData) 

из

@Html.DropDownList("BOData") 

Что касается доступа к базе данных, которую вы пытаетесь «первый код» использовать в существующей базе данных? Если вы должны переопределить контекст конструктор как этот

public class iRegDBContext : DbContext 
{ 
  public iRegDBContext() 
     :base("Name= iRegDBContext") 
   { 
   } 
} 

этой ссылку http://msdn.microsoft.com/en-us/data/jj200620.aspx

Надеется, что это помогает.

+0

Пожалуйста, вы можете сказать мне, почему вы использовали 'public iRegDBContext() : base (" Name = iRegDBContext ")' В чем смысл и использование этого ??? – Rahul

+0

Когда вы используете «Первый код», пытающийся подключиться к существующей базе данных, вам нужно указать инфраструктуру сущности для использования этой базы данных, иначе она создаст базу данных с именем iRegDBContext + hash. вы можете увидеть все это в ссылке, которую я опубликовал в ответ. – hjgraca

0

попробовать создать свой выпадающий таким образом

@Html.DropDownList(x => x.Selected, PathToController.GetDropDown()) 

, а затем в контроллере

public static List<SelectListItem> GetDropDown() 
{ 
    List<SelectListItem> ls = new List<SelectListItem>(); 
    lm = (call database); 
    foreach (var temp in lm) 
    { 
     ls.Add(new SelectListItem() { Text = temp.name, Value = temp.id }); 
    } 
    return ls; 
} 

Надеется, что это помогает

+0

: Thanx, чтобы заинтересовать мой вопрос и за ваше предложение. Но VS показывает мне красное подчеркивание PathToController. Что я должен сделать для этого? – Rahul

+0

введите имя контроллера и введите ctrl-. это приведет к полному пути к вашему контроллеру (проект, область и т. д.), –

3

Первых Создать список BO для меню списка в VIEW

@{ 
    var Bolst= Model.BO.Select(cl => new SelectListItem 
     { 
      Value = cl.Value.ToString(), 
      Text = cl.Text== null ? String.Empty : cl.Text 
     }); 
} 

@(Html.DropDownList("sampleDropdown", BOlst, "-----Select-----")) 

In Контроллер:

return View(BOlst); // why use Viewbag when directly pass it to view 
0

У меня недавно возникла эта проблема и удалось заставить ее работать с помощью Viewbag. Вам нужно будет приспособиться к вашим таблицам Db, но он работает и довольно прост.

Populating Drop Down Box with Db Data

Смежные вопросы