2016-10-23 18 views
0

私はこの問題を多く探し求めましたが、多くの修正がありましたが、私にとってはうまくいきませんでした。 dropdownlistのデフォルト値を設定したいのですが、私が人を編集したい場合、パートナーのドロップダウンリストは常にデフォルトのテキスト'select a partner'に行きます。変更を保存するときは、人が持っていたし、再び彼を選択するか、またはパートナーは、単にデータベースにnullに変更...MVCドロップダウンリストでデフォルト値が選択されていません

私が今持っているコードは次のとおりです。

CONTROLLER:

// GET: /Persoon/Edit/5 
    [Authorize(Roles = "Beheerder")] 
    public ActionResult Edit(int id) 
    { 
     var persoon = _persoonBll.GetById(id); 
     if (persoon == null) 
     { 
      return RedirectToAction("Index"); 
     } 
     var persoonViewModel = new PersoonDetailViewModel() 
     { 
      PersoonID = persoon.PersoonID, 
      Voornaam = persoon.Voornaam, 
      Naam = persoon.Naam, 
      GSM = persoon.GSM, 
      Email = persoon.Email, 
      Telefoon = persoon.Telefoon, 
      PartnerID = persoon.PartnerID 

     }; 

     //generate list of partners 
     var PossiblePartners= _persoonBll.GetPossiblePartnersForPersoon(persoon).ToList(); 


     //generate views for possible partners 
     IEnumerable<SimplePersoonViewModel> simpleList = CreateSimplepPersoonForList(PossiblePartners); 


     ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname"); 


     ... more code 
    } 
ここ

は、リストを作るコードです:

private IEnumerable<SimplePersoonViewModel>  CreateSimplepPersoonForList(List<Persoon> lstPersons) 
    { 

     var lstSimplePersons = new List<SimplePersoonViewModel>(); 
     lstPersons.ToList().ForEach(p => lstSimplePersons.Add(new SimplePersoonViewModel() { Id = p.PersoonID, Fullname = p.FullName })); 
     return lstSimplePersons; 
    } 

simpleListは私がdropdownlistを埋めるために作成したリストです。それは完璧に動作します。

HTML:

<div class="form- 
     <p> 
      <%: Html.DisplayFor(model => model.Partner.FullName) %> 
     </p> 

     <%: Html.DropDownList("PartnerID", 
       (IEnumerable<SelectListItem>)ViewBag.PossiblePartners, 
          "--- Choose a partner ---", 
           new { @class="chosen-select"})%> 

     <%: Html.ValidationMessageFor(model => model.PartnerID) %> 

    </div> 

私はそれらのいずれかがある、すでに別のものを試してみました:

ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname", persoon.PartnerId); 

でも何でも、私がやるかしてみてください、dropdownlist'Choose a partner'を示し続けて...

+0

はい、私のドロップダウンリストは、すべての_'partners '_...といっしょになります。 –

+0

「persoon」は何ですか? 'persoon.PArtnerId'はsimpleListのIDの1つですか? – Shyju

+0

モデルをビューに渡す前に、コントローラーに 'PartnerID'の値を設定する必要があります(モデルバインディングはプロパティの値にバインドして動作します) –

答えて

-2

問題は次のとおりです。

ViewBag.PossiblePartners = new SelectList(simpleList, "Id", "Fullname"); 

選択された値が4番目のパラメータであるため、既存の要素IDを渡す必要があります。選択されたプロパティは "Id"に基づいているため、オブジェクト全体ではなく、Idであることには言及する価値があります。あなたがしようとしたと述べている

ViewBag.PossiblePartners = new SelectList(simpleList, "Id", "Fullname", selectedElement.Id); 

ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname", persoon.PartnerId); 

をしかし、あなたはdataValueFieldとして「ID」を使用して「persoon」から「PARTNERID」を使用しているので、それはこのようなものになるだろうオブジェクト、私は "persoon.PartnerId"から来るIdが "simpleList"オブジェクトにないと信じさせます。それを確認してください。

私はそれをテストしたところ、うまく動作します。良い週末を。よろしく。

+0

これは完全に間違っています。モデルバインディングは、プロパティの値にバインドすることで機能します。 'SelectList'コンストラクタの4番目のパラメータを設定することは、プロパティへのバインディング時に無視され、' @Html.DropDownList( "NotAProperty"、(IEnumerable )ViewBag.PossiblePartners、... ) ' –

+0

あなたは正しいです、それはDropDownListを使用しているときに動作し、それはまさに質問で使われているものです。また、@Html.DropDownList( "NotAProperty"、(IEnumerable )、ViewBag.PossiblePartners、....)は、Propertyとともに動作します。プログラマは、構文が異なるものの、DropDownListまたはDropDownListForを使用するかどうかを選択できます。 @Html.DropDownList( "Property"、(IEnumerable )、ViewBag.PossiblePartners、....)でプロパティを使用したように、私がテストしたと言ったとき、正しくよろしく。 – dime2lo

+0

シンプルリストには、そのsimpleList内のすべての人物のpersoon.idとpersoon.fullnameがあります。だから、現在のpartnerId(partnerId =データベース内の別の人のID)にデフォルト値を設定しようとすると、ドロップダウンリストで誰かを選択して保存すると、選択したアイテムのIDが取得され、新しいパートナーとしてデータベースに入れます(それは完璧に機能します)。しかし、zholinhoはpartnerIdが文字列でなければならないと言いますが、それはおそらく問題ですか? –

0

ViewModelとSelectListItemを試してみませんか?私はこの

コントローラのような何かをするだろう:

Model.Partners = partnerList.Select(partner => new SelectListItem 
{ 
    Text = partner.FullName, 
    Value = partner.Id 
}).ToList(); 

HTML:

@Html.DropDownListFor(m => m.PartnerId, new SelectList(Model.Partners, "value", "text"), "--- Choose a partner ---", new { @class = "chosen-select"}) 

PARTNERID文字列でなければなりません。そして、PartnerIdを設定するだけです。

+0

既にこれも試しましたが、同じ結果です。ドロップダウンリストはデフォルトメッセージを選択するだけです。 –

+0

私は自分の答えを更新しました。 ** PartnerId ** @DenzelvanBelleを設定することを忘れないでください – zholinho

関連する問題