【发布时间】:2011-02-09 21:38:12
【问题描述】:
已经以各种形式提出了这个问题,但似乎没有一个答案适合我的情况。我只是想在我的控制器中检索下拉列表的选定值。
这是我的代码:
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 对象为空。
我尝试在我的 viewModel 构造函数中映射“StateId”属性,但这也不起作用。我做错了什么?
谢谢。
【问题讨论】:
标签: drop-down-menu asp.net-mvc-3 controller viewmodel