Вопрос по asp.net-mvc-3, asp.net-mvc – Как читать данные из выпадающего в ASP.Net MVC 3

2

Шаг 1:

Я использую раскрывающийся список для отображения местоположений компании. Список приходит из таблицы местоположений.

Шаг 2:

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

Когда пользователь выбирает Индию, это значение (Имя местоположения) должно храниться в Таблице UserLogin.

Как я могу прочитать значение из выпадающего в ASP.Net MVC 3?

попробуйте решение Brendan Vogt, оно будет работать learning

Ваш Ответ

3   ответа
4

Создайте ViewModel для вашей формы

public class CompanyViewModel
{
  public int CompanyId { set;get;}
  // Other properties of Company
  public int SelectedLocationId { set;get;}
  public IEnumerable<Location> Locations { set;get;}
}

Предполагая, что у вас есть класс Location, как этот

public class Location
{
  public int Id { set;get;}
  public string Name { set;get;}
}

В реестре (HTTPGET) Метод действия, возвращает объект CompanyViewModel с местоположениями, заполненными из базы данных в представление

public ActionReuslt Register()
{
  CompanyViewModel model=new CompanyViewModel();
  model.Locations =myRepositary.GetAllLocations();
  return View(model);
} 

Если предположить,GetAllLocations возвращает список объектов Location из вашего хранилища.

И в представлении реестра, который строго типизирован для CompanyViewModel

@model CompanyViewModel
@using(Html.BeginForm())
{

  @Html.DropDownListFor(x=>x.SelectedLocationId,
                     new SelectList(Model.Locations ,"Id",
                     "Name"),"Select Location")

  <input type="submit" value="Save" />
}

Теперь напишитеHTTPPost actionmethod для обработки формы сообщения (когда пользователь отправляет форму)

[HttpPost]
public ActionResult Register(CompanyViewModel model)
{
 if(ModelState.IsValid)
 {
  // You will have selected Location id available in model.SelectedLocationId property now
  //Save and redirect.
 }
 //Model Validation failed. so Let us reload the locations again
 //because HTTP is stateless and ASP.NET MVC is true to HTTP ! :)
 model.Locations =myRepositary.GetAllLocations();
 return View(model);
}
Error: User Rate Limit Exceededforums.asp.net/p/1802976/4977669.aspx/… P_A_1
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded
3

Вот пример кода, который вы можете изменить и использовать в своем сценарии. Я не знаю, как выглядит ваш код, поэтому я создал свой собственный.

По вашему мнению:

@model YourProject.ViewModels.YourViewModel

Раскрывающийся список ваших местоположений:

<td><b>Location:</b></td>
<td>
     @Html.DropDownListFor(
          x => x.LocationId,
          new SelectList(Model.Locations, "Id", "Name", Model.LocationId),
          "-- Select --"
     )
     @Html.ValidationMessageFor(x => x.LocationId)
</td>

Ваша модель просмотра:

public class YourViewModel
{
     // Partial class

     public int LocationId { get; set; }
     public IEnumerable<Location> Locations { get; set; }
}

Ваш метод создания действия:

public ActionResult Create()
{
     YourViewModel viewModel = new YourViewModel
     {
          // Get all the locations from the database
          Locations = locationService.FindAll().Where(x => x.IsActive)
     }

     // Return the view model to the view
     // Always use a view model for your data
     return View(viewModel);
}

[HttpPost]
public ActionResult Create(YourViewModel viewModel)
{
     if (!ModelState.IsValid)
     {
          viewModel.Locations = locationService.FindAll().Where(x => x.IsActive);

          return View(viewModel);
     }

     // If you browse the values of viewModel you will see that LocationId will have the
     // value (unique identifier of location) already set.  Now that you have this value
     // you can do with it whatever you like.
}

Ваш класс местоположения:

public class Location
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

Это просто, как может прийти. Надеюсь, это поможет :)

UPDATE:

Мой сервисный уровень предназначен для дальнейшей бизнес-логики, а затем вызывает мой уровень репозитория для получения данных из базы данных. Сначала я использую код Entity Framework. Я также использую Autofac для своего контейнера IoC.

Ваш уровень обслуживания:

public class LocationService : ILocationService
{
     private readonly ILocationRepository locationRepository;

     public LocationService(ILocationRepository locationRepository)
     {
          this.locationRepository = locationRepository;
     }

     public IEnumerable<Location> FindAll()
     {
          return locationRepository.FindAll();
     }
}

И ваш репозиторий:

public class LocationRepository : ILocationRepository
{
     YourDbContext db = new YourDbContext();

     public IEnumerable<Location> FindAll()
     {
          return db.Locations.OrderBy(x => x.Name);
     }
}

Ваш контекстный класс базы данных:

public class YourDbContext : DbContext
{
     public DbSet<Location> Locations { get; set; }
}
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded P_A_1
1

Это зависит от того, как вы получаете значения вашей формы, если вы передаете formcollection, тогда вы можете просто получить доступ к ее значению

public ActionResult MyAction (FormCollection form)
    {
        string value = form["DropDownListName"];
    }

Или вы можете получить к нему доступ через

string value = Request.Form["DropDownListName"];
Error: User Rate Limit Exceededforums.asp.net/t/1803054.aspx/…Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded P_A_1
Error: User Rate Limit Exceeded

Похожие вопросы