Выпадающий список — MVC3

#c# #asp.net-mvc #asp.net-mvc-3 #drop-down-menu

#c# #asp.net-mvc #asp.net-mvc-3 #выпадающее меню

Вопрос:

Я использую C # в ASP MVC3. У меня есть две таблицы с SQL Server.Имена таблиц SMS_User и SMS_Division в SQL Server 2008. Когда я создаю нового пользователя, я хочу показать идентификатор подразделения из таблицы sms_division.

SMS_User содержит UserName , DivisionID , EmailAddress

SMS_Division содержит DivisionID , DivisionName .

Код контроллера :

 UserController : Controller
{
   private NetPerfMonEntities2 db = new NetPerfMonEntities2(); 
   IEnumerableZamZam= db.SMS_Division.Select(c => new SelectListItem { Value = c.divisionid.ToString(), Text = c.divisionid.ToString() } );
}
  

Когда я создаю нового пользователя в представлении User Create (), я хочу показать имя подразделения в виде выпадающего списка вместо текстового поля. Как я это делаю?

 @Html.DropDownListFor(model => model.divisionid, (IEnumerable<SelectListItem>) ViewData["Divisions"], "<--Select a divison-->") 
@Html.ValidationMessageFor(model => model.divisionid) 
  

У меня есть это сообщение об ошибке :

 CS0103: The name 'sms_amountlimit2' does not exist in the current context
  

Комментарии:

1. Пользовательский контроллер: частные NetPerfMonEntities1 db = новые NetPerfMonEntities1(); IEnumerable<SelectListItem>Подразделения= db.SMS_Division. Выберите(c => new SelectListItem { Значение = c.divisionid. toString(), Text = c.имя подразделения. toString() } ); { ViewData[«Подразделения»] = подразделения; } } }

Ответ №1:

Я предполагаю, что в моем ответе будет несколько недостающих частей вашего вопроса, и дам вам общий шаблон для создания рабочего выпадающего списка ASP.NET MVC 3 :

Давайте начнем с моделей :

UserModel будет классом, представляющим данные, извлеченные из sms_user

 public class UserModel
{
   public string Username { get; set; }
   public string EmailAddress { get; set; }
   public int DivisionId { get; set; }
}
  

DivisionModel будет классом, представляющим данные, извлеченные из sms_division

 public class DivisionModel
{
   public int DivisionId { get; set; }
   public string DivisionName { get; set; }
}
  

Под извлеченным я подразумеваю все, что может преобразовать данные в вашей базе данных в экземплярах классов. Это может быть ORM (EntityFramework или другие) Или SQL-запросы и т. Д…

Далее идет viewmodel, потому что не имеет смысла подключать IEnumerable делений в UserModel, и мне лично не очень нравится использовать ViewData, когда я могу этого избежать :

 public class UserViewModel
{
   public UserModel User { get; set; }
   public IEnumerable<DivisionModel> Divisions {get; set;}
}
  

Далее, контроллер :

 public class UserController : Controller
{
   public ActionResult Create()
   {
      List<DivisionModel> divisions = new List<DivisionModel>();
      divisions.Add(new DivisionModel() { DivisionId = 1, DivisionName = "Division1" });
      divisions.Add(new DivisionModel() { DivisionId = 2, DivisionName = "Division2" });

      UserModel user = new UserModel() { Username = "testUser", EmailAddress = "testAddress@test.com" };

      return View(new UserViewModel() { User = user, Divisions = divisions });
   }
}
  

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

И, наконец, представление :

 @model ViewModels.UserViewModel
@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>
<p>
@Html.DropDownListFor(model => model.User.DivisionId, new SelectList(Model.Divisions, "DivisionId", "DivisionName"),  "-- Select Division --") 
@Html.ValidationMessageFor(model => model.User.DivisionId)  
</p>
  

Обратите внимание, что модель, привязанная к представлению, является ViewModel .

Ответ №2:

В вашей модели добавьте коллекцию подразделений, затем создайте выпадающий список, как показано ниже:

 @Html.DropDownListFor(m => m.SelectedDivisionId, 
                      new SelectList(Model.Divisions, "DivisionId", "DivisionName"), 
                      "-- Select Division --")
  

Комментарии:

1. Сообщение об ошибке: Сообщение об ошибке компилятора: CS1061: ‘AFESignatureApplication. Модели. SMS_AmountLimit2’ не содержит определения для ‘Divisions’ и никакого метода расширения ‘Divisions’, принимающего первый аргумент типа ‘AFESignatureApplication. Модели. Может быть найден SMS_AmountLimit2’ (вам не хватает директивы using или ссылки на сборку?) Код для контроллера:

2. частные NetPerfMonEntities2 db = новые NetPerfMonEntities2(); IEnumerable<SelectListItem>Подразделения= db.SMS_Division. Выберите(c => new SelectListItem { Значение = c.divisionid. toString(), Text = c.имя подразделения. toString() } ); { ViewData[«Подразделения»] = подразделения; }

3. @SyedSami пожалуйста, отредактируйте свой пост и поместите код в блок кода, он нечитаем в комментариях здесь.

4. у вас есть адрес электронной почты? так что я могу отправить вам файл по почте. Спасибо