この質問はさまざまな形で質問されていますが、私の状況に合った回答はありません。私は単に私のコントローラのドロップダウンリストの選択値を取得しようとしています。ここでビューモデルを使用して選択リストの選択した値をコントローラに投稿するにはどうすればいいですか?
は私のコードは次のとおりです。
ViewModel.cs
public class ViewModel
{
public ViewModel() {}
public ViewModel(Contact contact, IEnumerable<State> states)
{
this.Contact = contact;
this.States = new SelectList(states, "Id", "Name", contact.StateId);
}
public Contact Contact {get;set;}
public SelectList States {get;set;}
}
Controller.cs
[HttpPost]
public ActionResult Edit(ViewModel viewModel)
{
_contactService.UpdateContact(viewModel.Contact);
return RedirectToAction("Item", new {id = viewModel.Contact.Id});
}
View.cshtml
<button type="submit" onclick="javascript:document.update.submit()"><span>Update</span></button>//aesthic usage.
@{using (Html.BeginForm("Edit", "Controller", FormMethod.Post, new { name = "update" }))
{
@Html.HiddenFor(m => m.Contact.Id)
@Html.LabelFor(m => m.Contact.Name, "Name:")
@Html.TextBoxFor(m => m.Contact.Name)
<label for="state">State:</label>
@Html.DropDownList("state", Model.States)
}
}
ことは除いてすべてが期待どおりに動作しますドロップからの値ダウンリストは、投稿されたviewModelでコントローラに渡されます。編集ページとすべてのフィールドが正しく読み込まれます。ドロップダウンは正しくバインドされ、選択した値が適切に表示されます。しかし、私が投稿すると、私は "連絡先"オブジェクトをコントローラに渡すだけです。 "States" SelectListオブジェクトはnullです。
私はviewModel contstructorで "StateId"プロパティをマッピングしようとしましたが、それはどちらも動作しませんでした。私は間違って何をしていますか?
ありがとうございました。 m.State
が選択された値を保持している
@Html.DropDownListFor(m => m.Contact.StateId, Model.States, "-- Please select a State --")
:「状態」は、あなたがこのようにそれを使用することができ、あなたのモデルの一部である場合
dropdownvalueを選択した後でボタンをクリックしていたのですか、ポストバックをしたいドロップダウンの選択だけでしたか? – alice7
連絡先エンティティを持つビューモデルを使用するこの正しい方法はありますか? – Rohit