2012-05-08 37 views
0

これは簡単なことかもしれませんが、私は非常に奇妙な問題に悩まされています。MVC3のドロップダウンリストから選択した値をフェッチする方法

アプリケーションでドロップダウンを作成しましたが、編集時に選択した値をフェッチできません。ここで

は私のビューです:

<div class="editor-field"> 
     @Html.DropDownListFor(model => model.Hobbyhome.HobbyHomeAddressList.First().ProvincialState.ProvincialStateID, new SelectList(ViewBag.State, "ProvincialStateID", "ProvincialStateName"), "-----Select State-----", new { @id = "State" })<font color="red">*</font> 
     </div> 

私は値をフェッチするために、コントローラ内の関数を書かれていると私はまた、値を取得することができていますが、それはビューになったとき、それは私の値を示してdoesnot

@Html.DropDownListFor(model => model.Hobbydetail.Hobbymaster.HobbyId, new SelectList(ViewBag.Hobby, "HobbyId", "HobbyName"), "----Select Hobby----", new { @id = "Hobby" })<font color="red">*</font> 

そして奇妙なことは、私が最初に一つ のための2番目のドロップダウンの値ではなくを見ることができますされています。私はこのような別のドロップダウンを作成しました0 list.First()を最初のドロップダウンに使用しているため、この問題が発生している可能性があります。bcoz編集ビューページでは、「----- Select State--」と表示されます。最初のドロップダウンの値。
ビュー編集するには「選択した値オブジェクト」を取得するには、私に

答えて

0

を助けてください:あなたのViewBag.Hobbyはあなたの中に初期化され、満たされていることを確認してください、あなたのドロップダウン内のすべての要素を持っているために

@Html.DropDownListFor(model => model.Hobbydetail.Hobbymaster.HobbyId, 
    new SelectList(ViewBag.Hobby, "HobbyId", "HobbyName", Model.Hobbydetail.Hobbymaster.HobbyId), 
    "----Select Hobby----", new { @id = "Hobby" }) 

をコントローラが編集ビューを表示する前に!

+0

Althausを利用でき、選択した値を持つことになります!これは – user1274646

0

First()メソッドは、シーケンスの最初の要素を返します。ソースシーケンスが空の場合、例外がスローされます。

なぜFirst()を使用する必要がありますか?私はあなたが間違った方法でそれをやっていると思います。あなたの最初のパラメータ、DropDownListForは、選択した値を保持する変数でなければなりません。

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper, 
    string name, 
    IEnumerable<SelectListItem> selectList, 
    IDictionary<string, Object> htmlAttributes 
) 

:フォームフィールドの名前を返すように。

あなたは、私がこれを処理するクリーンのViewModelになるだろう第二のアプローチ

を使用する必要があります。 これは私の意見をきれいにします

public class AddHobbyViewModel 
{ 
    public int SelectedHobbyId { set;get;} 
    public IEnumerable<Hobby> Hobbys { set;get;} 
    //other relevant properties for the View. 
} 

GETアクションメソッドでは、ViewBagでデータを返す代わりに、私はViewModelで返します。

public ActionResult Add() 
{ 
    AddHobbyViewModel model=new AddHobbyViewModel(); 
    model.Hobbys=db.Hobbies(); // get all available hobbies. 

    return View(model); 
} 

とビューでは、

@Html.DropDownListFor(model => SelectedHobbyId , new SelectList(Hobbys , "HobbyId", "HobbyName"), "----Select Hobby----", new { @id = "Hobby" }) 

今、あなたがトンありがとうねえSelectedHobbyIdプロパティであなたのhttppost mehodに

[HttpPost] 
public ActionResult Add(AddHobbyViewModel model) 
{ 
    // check model.SelectedHobbyId here 
} 
+0

うまくいけば、ウルの解決策も働いた! – user1274646

+0

@ user1274646:喜んでそれがあなたを助けました。 – Shyju

関連する問題