2011-10-27 12 views
0

ASP.MVC3のドロップダウンリストに奇妙な問題があります。asp.mvc3 @ Html.DropDownListFor <>が正しく動作しません。

public class dto{ 
    [Key] 
    public Int32 ClientID { get; set; } 
    [Required, MaxLength(50)] 
    public Name{get;set;} 

    public int ClientTypeID { get; set; } 

    public SelectList ClientTypes { get; set; } 
} 

カミソリの使用:私はデータをClientTypesを埋めるコントローラで

<div class="editor-label"> 
    @Html.LabelFor(model => model.ClientTypeID) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(x => x.ClientTypeID,Model.ClientTypes) 
</div> 

私はこのようになりますビューモデルを持っています。 私は新しいdtoオブジェクトを作成するためにそれを使用するとうまく動作し、選択はコントロールに戻されて保存されます。 既存のオブジェクトを編集するときにもうまく動作し、ページが開くときに適切な値が選択されます。

問題は、選択を変更すると、他の編集された値が正しく返される間、コントロールにポストされないということです。

問題の方向を誰かが指摘できますか?

ありがとうございます。

答えて

0

だから、私のコードで私はこのような何かを - ViewModelにに私はIEnumerableを持っている:

public IEnumerable<Choice> Choices { get; set; } 

コントローラのアクションに戻って読み込まれます。

Choice

public class Choice 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

のようなものを見て、私のViewModelに私はこのようになりますメンバーも持っている:

public int TheChoice { get; set; } 

をして、私の見解では、私はその何かを持っています

@Html.DropDownListFor(model => model.TheChoice, new SelectList(Model.Choices, "Id", "Text", @Model.TheChoice)) 

これはかなりうまくいくようです。

あなたはそれとは違ったことをしていますか?

+0

最後の@ Model.TheChoice部分が欠落しているようです。しかし、同値を加えても事は変わらなかった。更新された値をControllerに送り返す以外は、すべてのシナリオで動作します。 – Zaak

+0

コントローラのアクションにブレークポイントを設定し、ビューから返されたviewmodel引数を調べると、viewmodel引数のClientID値に* old *値があり、* new * ? – itsmatt

+0

はcliendIDではなくClientTypeIDですが、正しいです。私はVMからすべての値を見ることができ、テキストフィールドは更新され、ClientTypeIDは更新されません。それはまだ古い価値です。私は、それが正しくそこに送られ、そしてまた戻ってくることを意味すると結論づけました、ちょうどそこで更新されません。そして私は理由を知らない。 – Zaak

関連する問題