-1

ビューに次のモデルとシンプルなドロップダウンがあります。ドロップダウンに顧客名を入力したい。次のコードを試しましたが、うまくいきませんでした。このコードの何が問題なのですか。

モデル

 public class customer
{

public int id { get; set; }
public string name { get; set; }
public string address { get; set; }

  }

//////////////////////////

    @{
   Layout = null;
   }

    @model IEnumerable<MvcApplication1.customer>

      <!DOCTYPE html>

        <html>
    <head>
       <meta name="viewport" content="width=device-width" />
      <title>Index</title>
   </head>
         <body>
      <div>

 @Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));

        </div>
4

3 に答える 3

2

Stack Overflow には、この正確な質問に関するサンプルが多数あります。これまで何度も答えてきました。

ビュー モデルを使用してビュー上のデータを表現します。ドメイン オブジェクトをビューに渡さないでください。ビュー モデルには、ビューで必要なプロパティがあります。この場合、顧客のドロップダウンのみを操作します。

ビュー モデルは次のようになります。

public class CustomerViewModel
{
     public int CustomerId { get; set; }

     public IEnumerable<Customer> Customers { get; set; }
}

あなたの顧客クラス:

public class Customer
{
     public int Id { get; set; }

     public string Name { get; set; }
}

あなたのコントローラー:

public class CustomerController : Controller
{
     private readonly ICustomerRepository customerRepository;

     public Customer(ICustomerRepository customerRepository)
     {
          this.customerRepository = customerRepository;
     }

     public ActionResult Create()
     {
          CustomerViewModel viewModel = new CustomerViewModel
          {
               Customers = customerRepository.GetAll()
          };

          return View(viewModel);
     }
}

あなたの見解:

@model YourProject.ViewModels.Customers.CustomerViewModel

@Html.DropDownListFor(
     x => x.CustomerId,
     new SelectList(Model.Customers, "Id", "Name", Model.CustomerId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.CustomerId)

これが役立つことを願っています。

于 2013-07-02T09:20:38.310 に答える
0

これを試して、モデルを次のように変更してください

public class customer
{

public int id { get; set; }
public string SelectedName { get; set; }
 public IEnumerable<SelectListItem> Names { get; set; }
public string address { get; set; }

  }

コントローラ内

[HttpGet]
public ActionResult Customer()
{
  var names=//collect names from database
  var model = new Customer
    {
       Names = names.Select(m=> new SelectListItem
         {
            value = m.whatever value you want to get(probably Id)
            text = m.name you want to display
         })
    };
    return View(model);
}

そして視野に

@model MvcApplication1.customer
@Html.DropDownListFor(model => model.SelectedName, Model.Names)
于 2013-07-01T13:31:52.107 に答える