Drop down menu 如何使用视图模型将selectlist的选定值发布到控制器?
这个问题以各种形式提出,但没有一个答案似乎适合我的情况。我只是试图检索控制器中下拉列表的选定值 这是我的密码: ViewModel.csDrop down menu 如何使用视图模型将selectlist的选定值发布到控制器?,drop-down-menu,asp.net-mvc-3,controller,viewmodel,Drop Down Menu,Asp.net Mvc 3,Controller,Viewmodel,这个问题以各种形式提出,但没有一个答案似乎适合我的情况。我只是试图检索控制器中下拉列表的选定值 这是我的密码: ViewModel.cs public class ViewModel { public ViewModel() {} public ViewModel(Contact contact, IEnumerable<State> states) { this.Contact = contact; this.States = new Sel
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;}
}
public class ViewModel
{
public ViewModel() {}
public ViewModel(Contact contact, IList<State> states)
{
//no need to pass in a SelectList or IEnumerable, just what your service or repository spits out
this.Contact = contact;
this.States = states;
}
public Contact Contact {get;set;}
public IList<State> States {get;set;}
}
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)
}
}
Update//aesthic用法。
@{使用(Html.BeginForm(“编辑”、“控制器”、FormMethod.Post、新的{name=“更新”}))
{
@Html.HiddenFor(m=>m.Contact.Id)
@LabelFor(m=>m.Contact.Name,“Name:”)
@Html.TextBoxFor(m=>m.Contact.Name)
声明:
@DropDownList(“state”,Model.States)
}
}
除了在我发布的viewModel中没有将dropdownlist中的任何值传递给控制器之外,所有操作都按预期进行。“编辑”页面和所有字段均正确加载。下拉列表将正确绑定并正确显示其选定值。然而,当我发布时,我只得到一个传递给控制器的“Contact”对象。“状态”SelectList对象为空
我尝试在viewModel Constructor中映射一个“StateId”属性,但也不起作用。我做错了什么
谢谢 尝试改用
@Html.DropDownListFor
,如果“状态”是模型的一部分,您可以这样使用它:
@Html.DropDownListFor(m=>m.Contact.StateId,Model.States,“--请选择一个状态--”
,其中m.State
保存所选值
为了避免将IEnumerable与模型混淆,我将把它放在ViewBag/ViewData中
它看起来像这样:
@Html.DropDownListFor(m=>m.Contact.StateId,(IEnumerable)ViewBag.States,“--请选择一个州--”
在返回此视图的操作中,您需要将可枚举状态初始化为ViewBag.States属性。尝试使用
@Html.DropDownListFor
,如果“状态”是模型的一部分,您可以这样使用它:
@Html.DropDownListFor(m=>m.Contact.StateId,Model.States,“--请选择一个状态--”
,其中m.State
保存所选值
为了避免将IEnumerable与模型混淆,我将把它放在ViewBag/ViewData中
它看起来像这样:
@Html.DropDownListFor(m=>m.Contact.StateId,(IEnumerable)ViewBag.States,“--请选择一个州--”
在返回此视图的操作中,您需要将可枚举状态初始化为ViewBag.States属性。我讨厌回答自己的问题,但基于我遇到的多个问题以及大量可用答案,我想我会总结我的发现 首先感谢菲利普,他的回答并没有完全解决我的问题,但它把我引向了正确的方向+一, 如果您正在创建一个需要下拉列表才能查看和编辑的表单,下面是一些建议和要点。首先,我将列出满足我需要的参数列表
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;}
}
public class ViewModel
{
public ViewModel() {}
public ViewModel(Contact contact, IList<State> states)
{
//no need to pass in a SelectList or IEnumerable, just what your service or repository spits out
this.Contact = contact;
this.States = states;
}
public Contact Contact {get;set;}
public IList<State> States {get;set;}
}
查看//在此感谢Artirto
@{使用(Html.BeginForm(“编辑”、“控制器”、FormMethod.Post))
{
@Html.HiddenFor(m=>m.Contact.Id)
@DropDownListFor(m=>m.Contact.StateId,新选择列表(Model.States,“Id”,“Name”,“@Model.Contact.StateId))
}
}
我讨厌回答我自己的问题,但基于我提出的多个问题以及无数的答案,我想我会总结一下我的发现
首先感谢菲利普,他的回答并没有完全解决我的问题,但它把我引向了正确的方向+一,
如果您正在创建一个需要下拉列表才能查看和编辑的表单,下面是一些建议和要点。首先,我将列出满足我需要的参数列表
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;}
}
public class ViewModel
{
public ViewModel() {}
public ViewModel(Contact contact, IList<State> states)
{
//no need to pass in a SelectList or IEnumerable, just what your service or repository spits out
this.Contact = contact;
this.States = states;
}
public Contact Contact {get;set;}
public IList<State> States {get;set;}
}
查看//在此感谢Artirto
@{使用(Html.BeginForm(“编辑”、“控制器”、FormMethod.Post))
{
@Html.HiddenFor(m=>m.Contact.Id)
@DropDownListFor(m=>m.Contact.StateId,新选择列表(Model.States,“Id”,“Name”,“@Model.Contact.StateId))
}
}
我使用了ViewBag,它的工作原理与预期一样,但它看起来就像是另一款迷你viewmodel。为了基于我发布的代码进行论证,为什么选择列表作为视图模型的一部分时会返回空值?因为在您的模型中,您需要一个SelectList
,而表单不会发布该列表。如果在名为“state”的操作上添加一个字符串
参数,它应该会得到您选择的值。我使用了ViewBag,它按预期工作,但它有点像另一个迷你viewmodel。为了基于我发布的代码进行论证,为什么选择列表作为视图模型的一部分时返回空值?因为在您的模型中,您需要一个SelectL