2

ステップ1:

ドロップダウンを使用して会社の場所を表示しています。リストはLocationテーブルから取得されます。

ステップ2:

ユーザーが登録している間、ドロップダウンリストに問題の場所が表示されます。

ユーザーがインドを選択すると、この値(場所の名前)がUserLoginテーブルに保存されます。

ASP.Net MVC 3のドロップダウンから値を読み取るにはどうすればよいですか?

4

3 に答える 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;}
}

Register(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);
}
于 2012-05-11T11:33:20.203 に答える
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; }
}

これは簡単です。これがお役に立てば幸いです:)

アップデート:

私のサービスレイヤーは、さらなるビジネスロジックのために存在し、データベースからデータを取得するためにリポジトリレイヤーを呼び出します。最初にEntityFrameworkコードを使用します。IoCコンテナにもAutofacを使用しています。

サービスレイヤー:

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; }
}
于 2012-05-11T11:47:07.597 に答える
1

formcollectionを渡す場合、フォームの値を取得する方法によって異なります。これにより、フォームの値にアクセスできます。

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

または、次の方法でアクセスできます

string value = Request.Form["DropDownListName"];
于 2012-05-11T11:29:23.840 に答える