2014-08-28 5 views
0

Нелегко найти ответ на этот вопрос (Google, StackOverflow и ASP.NET).ASP.NET MVC 4 DropdownListFor, заполнение с использованием LINQ из DBContext?

// Model 
public IEnumerable<SelectListItem> State { get; set; } 

// View 
@Html.DropDownListFor(m => m.State, ????) 

// Controller 

using (var dbcontext = MyDbContext()) { 

    // ?? 
} 

return View(model); 

Я в полной растерянности, как заполнить MVC dropdownlistfor с помощью LINQ из DbContext. Я понимаю вещь DBContext и имею одну настройку. Я не понимаю, как построить запрос linq, а затем передать этот результат (LIST?) В DropDownListFor для помощника? Используя MS SQL, и у меня есть таблица States (id, name).

+0

быстрый поиск найдено http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with -asp-net-mvc.aspx, http://agilewarrior.wordpress.com/2012/12/13/how-to-simple-html-dropdownlistfor-mvc-net/, http://peternewhook.com/2013/ 02/asp-net-mvc-selectlist-selectedvalue-dropdownlistfor /, http://hammadk.com/dropdownlistfor-example-c/ и т. Д. У вас был более конкретный вопрос? – Claies

+0

Видел первый и нашел это сбивающим с толку. Специфика использует Linq с DBContexts. Хотя у первой ссылки есть пример этого, это просто не имело смысла для меня. – 2014-08-28 08:22:16

ответ

3

Во-первых, в вас модели, включают в себя свойства для того, что вы хотите связать с и список выбора

public class MyViewModel 
{ 
    public string StateID { get; set; } 
    .... // other properties 
    public SelectList StateList { get; set; } 
} 

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

// Initialise view model 
MyViewModel model = new MyViewModel(); 
// Select the data to display (lots of ways to do this) 
var states= from s in dbcontext.States 
       where s.SomeProperty == someValue // if you want to filer the results 
       select s 
// Assign select list (this sets the value to the ID property and the display text to the Name property) 
model.StateList = new SelectList(states, "ID", "Name"); 
// and if you want to set a default 
model.StateID = "NY"; 
return View(model); 

и в представлении

@Html.DropDownListFor(m => m.StateID, Model.StateList) 

это отобразит полное имя состояний в <select> и свяжет st Атес ID значение свойства StateID

+0

Я увидел этот точный ответ в другом сообщении SO и нашел его немного запутанным. В вашей модели есть CategoryID и CategoryList. Как эти свойства относятся к моей государственной собственности? Нужно ли мне изменить свойство State из IEnum в SelectList? Я думаю, мне нужно увидеть пример, основанный на том, что я написал для него, чтобы щелкнуть. – 2014-08-28 08:17:42

+0

Если бы просто привел пример, потому что я ничего не знаю о вашей модели. Является 'State' typeof' string', и вы хотите выбрать из списка состояний или 'State' - сложное свойство с указанными свойствами' int ID' и 'string Name'? –

+0

Состояние имеет значение ID, которое является двумя буквами abbrv для состояния, а Name - (естественно) полное имя состояния. Оба являются строками. – 2014-08-28 08:25:19

0
//dbcontext 

using (var dbcontext = MyDbContext()) 
{ 
Dictionary<string, string> states = dbcontext .States.ToDictionary(t => t.StateID.ToString(), t => t.StateName.ToString()); 

} 

// in controller attach this dictionary to ViewBag: 

ViewBag.States=states; 

// Просмотр

@Html.DropDownListFor(m => m.State, new SelectList(ViewBag.States, "Key", "Value")) 
+0

Кажется, есть много способов сделать это и начать его щелчок. Хотя ваш пример, похоже, не рассматривает модель? Или я это неправильно понимаю? – 2014-08-28 08:51:36

+0

Ну, вы можете создать свойство в модели в вашей модели Словарь states {get; set;} // и в контроллере: model.states = states; // возвращаем из dbcontext // на виду заменим ViewBag.States на model.states. – Tasawar

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