1

MVC3を使用しています。ドロップダウンをサービスからのデータにバインドしています。しかし、ページがポストバックされ、フィルターがリストに適用された後、サービスからのリストを常にバインドするため、ドロップダウンにはフィルター レコードの値がグリッドに表示されます。

ただし、ドロップダウンにデータベース内のすべてのレコードを常に表示する必要があります。

4

2 に答える 2

5

私はあなたの質問をはっきりと理解していません。しかし、それはあなたの見解にあるドロップダウンのようですか?また、あなたが何をバインドしようとしているのかわからないので、自分で作成しましたが、コードを見て、シナリオに合うように変更してください。

あなたの見解では:

@model YourProject.ViewModels.YourViewModel

ビューには、ドロップダウン リストに銀行のリストがあります。

銀行のドロップダウン:

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

ビューに返されるビュー モデル:

public class YourViewModel
{
     // Partial class

     public int BankId { get; set; }
     public IEnumerable<Bank> Banks { get; set; }
}

create アクション メソッド:

public ActionResult Create()
{
     YourViewModel viewModel = new YourViewModel
     {
          // Get all the banks from the database
          Banks = bankService.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)
     {
          // If there is an error, rebind the dropdown.
          // The item that was selected will still be there.
          viewModel.Banks = bankService.FindAll().Where(x => x.IsActive);

          return View(viewModel);
     }

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

あなたの銀行クラス:

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

これは簡単です。これが役立つことを願っています:)

PS:今後の投稿では、より適切なサポートができるよう、常にできるだけ詳細にお知らせください。また、コード サンプルを表示して、既に行ったことを確認できるようにすることも忘れないでください。私たちが持つことができる詳細は、より良いものです。

于 2012-05-11T12:57:41.090 に答える