Выпадающий список ASP.NET MVC из базы данных
Хорошо, поэтому я новичок во всем мире MVC, но, похоже, это очень хороший способ добиться успеха, и я пытаюсь заставить его работать здесь.
Проблема заключается в следующем:
Я не могу получить данные из моей таблицы в моей SQL-базе данных в простую раскрывающуюся форму на моей странице регистрации.
У меня просто нет идеи, куда положить материал, где код для открытия таблицы, выбрать идентификаторы, где положить response.write
и как отправить его в представление?
Моя модель такова:
public class users
{
public string name {get; set;}
public int user_id {get; set;}
}
My Controller:
[HttpGet]
public ActionResult ListUser()
{
return View();
}
И мой взгляд таков:
@model Community.Models.users
У меня есть googled в течение 2 дней и смотрел несколько видео на youtube, но бесполезно, я не могу найти его. Пожалуйста, кто-нибудь с некоторыми знаниями здесь? И, пожалуйста, назовите меня хорошими учебниками и/или форумами, на которых я могу найти больше вопросов, которые у меня могут быть
По-прежнему не повезло в этом проекте.
Я создаю форму и в этой форме, я хочу db-loop (IEnumerable
). Но текущая модель не является IEnumerable
. Я почти застрял, смотрел кучу учебников, и все они просто перечисляют одно соединение, а что, если мне нужны две модели?
Вот мой контроллер, я понял, что вы должны передать список в представление, верно?
public ActionResult Registration()
{
return View(db.users.ToList());
}
Как мне получить этот список в моем представлении без модели IEnumerable
?
@neoistheone, ваш пример не очень помог мне, моя БД открывается вот так:
private DataBaseContext db = new DataBaseContext();
и я не знаю, как это сделать, но он открывает соединение.
Я пробовал так много часов, просто глупо, не спал для долгого времени!
Я использую программирование ASP-Classic fyi, и это моя первая серьезная попытка обновить мои знания о программировании современного языка и ООП.
Ответы
Ответ 1
Добавьте SelectList
в свою модель:
public SelectList DropDownList { get; set; }
построить класс для этой коллекции:
public class MyListTable
{
public string Key { get; set; }
public string Display { get; set; }
}
а затем в вашем контроллере загрузите данные из класса MyListTable
из базы данных:
var list = new List<MyListTable>();
using (SqlConnection c = new SqlConnection(cString))
using (SqlCommand cmd = new SqlCommand("SELECT KeyField, DisplayField FROM Table", c))
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
list.Add(new MyListTable
{
Key = rdr.GetString(0),
Display = rdr.GetString(1)
});
}
}
}
var model = new users();
model.DropDownList = new SelectList(list, "Key", "Display");
а затем, наконец, вам нужно отправить свою модель в представление:
return View(model);
Теперь в Razor вы можете отобразить это:
@Html.DropDownListFor(m => Model.DropDownList);
Вы, конечно, можете назвать эти вещи лучшими именами, но вы получите эту идею.
Ответ 2
Там уже большие ответы, но вот еще один подход.
Вы будете использовать user
в качестве модели, ListUserViewModel
в качестве модели представления и UserController
в качестве контоллера. Работа view-model - переносить всю информацию, необходимую для отображения на странице с контроллера, без добавления нежелательных свойств в класс модели. В списке дел вашего пользователя из базы данных в выпадающем списке.
Модель:
public class User //By the way use singular when naming a class
{
public string name {get; set;}
public int user_id {get; set;}
}
View-модель
public class ListUserViewModel
{
public list<User> Users{get; set;}
}
контроллер
public class UserController : Controller
{
private DataBaseContext db = new DataBaseContext();
[HttpGet]
public ActionResult ListUser()
{
var users = db.Users.ToList();
var viewModel = new ListUserViewModel { Users = users };
return View(viewModel);
}
}
Теперь используйте ListUserViewModel вместо User в вашем представлении в качестве модели
@model Community.Models.ListUserViewModel
и выпадающий
@Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ")
Пояснение:
Вы создаете раскрывающийся список для пользователей с Model.Users
в качестве источника списка данных списка. "user_id"
в качестве значения выбранного пользователя и "name"
в качестве метки отображения. последний аргумент (я ставлю пустую строку " "
) является значением по умолчанию, которое выпадающее будет отображаться перед выбором.
Я надеюсь, что это поможет вам или кому-то еще.
Ответ 3
Попробуйте это,
модель
public string CoutryID { get; set; }
public List<SelectListItem> CountryList { get; set; }
Метод контроллера, который заполняет список
public List<Country> getCountryList()
{
using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext())
{
return (from c in _context.Countries
where c.IsDeleted == false
select c).ToList();
}
}
Выпадающий список в представлении
@Html.DropDownListFor(m => m.CoutryID,
new SelectList(Model.CountryList,
"CoutryID", "Value"))
Ответ 4
Если вы действительно новичок в ASP.Net MVC, это неплохое учебное пособие, в котором показано, как работает MVC-шаблон.
MVC3: http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3
MVC4: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
Вот пример кода для загрузки: http://code.msdn.microsoft.com/Introduction-to-MVC-3-10d1b098
это полезное видео: http://www.asp.net/mvc/videos/mvc-1/conference-presentations/creating-nerddinnercom-with-microsoft-aspnet-model-view-controller-mvc
Ответ 5
это моя таблица в базе данных
![введите описание изображения здесь]()
Посмотрите на мой контроллер действий
// GET: Letters
public ActionResult Index()
{
ViewBag.LetterStatus = new SelectList(LetterStatusService.GetAllLettersStatus(), "Id", (CultureHelper.GetCurrentCulture() == "ar") ? "NameArabic" : "Name", Request.QueryString["LetterStatus"]);
return View();
}
и в представлении
@Html.DropDownList("LetterStatus")
используемый мной конструктор
new SelectList(
list<Objlect> myListFromDatabase,
string PropertyNameOfValueInHtml,
string PropertyNameOfDesplayInHtml,
string SelectedItemValue
);
эту строку Request.QueryString["LetterStatus"]
, потому что я отправляю выбранные элементы в QuerySrting
и на основе CurrentCulture
Я выбрал какой столбец для отображения
и результат ![введите описание изображения здесь]()
но я думаю, что лучший способ сделать это: - получить или создать Элементы, затем Iterate бросить их, чтобы сгенерировать тег select вручную. Я хорошо описал этот подход в этом ответе
надеюсь, что это поможет вам
Ответ 6
Я нахожу, что эта система работает (и избегает использования ViewBag):
Показать модель:
public class YourViewModel
{
// This could be string, int or Guid depending on what you need as the value
public int YourDropdownSelectedValue { get; set; }
public IEnumerable<SelectListItem> YourDropdownList { get; set; }
}
Контроллер:
// Get database values (by whatever selection method is appropriate)
var dbValues = db.YourEntity.ToList();
// Make Selectlist, which is IEnumerable<SelectListItem>
var yourDropdownList = new SelectList(dbValues.Select(item => new SelectListItem
{
Text = item.YourSelectedDbText,
Value = item.YourSelectedDbValue
}).ToList(), "Value", "Text");
// Assign the Selectlist to the View Model
var viewModel = new YourViewModel(){
// Optional: if you want a pre-selected value - remove this for no pre-selected value
YourDropdownSelectedValue = dbValues.FirstOrDefault(),
// The Dropdownlist values
YourDropdownList = yourDropdownList
};
// return View with View Model
return View(viewModel);
и в представлении:
@Html.DropDownListFor(a => a.YourDropdownSelectedValue, Model.YourDropdownList, "select this text - change this to null to exclude", new { @class = "your-class" })