2012-05-11 3 views
2

Шаг 1:Как читать данные из выпадающего списка в ASP.Net MVC 3

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

Шаг 2:

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

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

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

+0

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

ответ

1

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

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

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

string value = Request.Form["DropDownListName"]; 
+0

Привет Sundal, я Написал вот так: –

+0

Публичный индекс показаний к действию() { ViewBag.OLocation = new SelectList (dbcontext.Organization_Details, "OName", "OLocation"); } и я зову эту OLocation в Index.cshtml, используя @ html.Dropdownlist («OLocation») и теперь, если пользователь нажимает кнопку отправки, то значение должно быть выбрано, а затем хранится в DB ... сейчас объясните версию –

+0

Вы получаете нуль? –

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;} 
} 

Предполагая, что у вас есть класс местоположения, такой как

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

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

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

Предполагая, что GetAllLocations возвращает список объектов Location из вашего репозитария.

И в Реестре View, который сильно типизированный к 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); 
} 
+0

Можете ли вы поделиться со мной своим методом Repositaty и GetAllLocations –

+0

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

+0

Пожалуйста, смотрите здесь один раз. ..http: //forums.asp.net/p/1802976/4977669.aspx/1? Re + Read + The + Data + From + DropDown + in + ASP + Net + MVC3 –

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; } 
} 
+0

Привет Что такое «locationService» в Locations = locationService.FindAll(). Где (x => x.IsActive) –

+0

Проверьте обновленный ответ. locationService - это ваш уровень обслуживания, который может обрабатывать любую бизнес-логику. Этот поворот вызывает ваш уровень репозитория. –

+0

Привет, я новичок в этой концепции MVC, и в прошлом я работал над MS CRM, и у меня было менее 15 дней в MVC ... –

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