我正在ASP.Net中工作,并且有我要在页面中显示的ViewModel枚举。它们包含一个下拉列表,并且当所述下拉列表更新时,我必须对视图模型进行枚举,更改其内部的重用级别,然后将其与更改一起回发。但是,当我发表文章时,它没有发送包含的viewmodel,而是发送了一个空的枚举。
到目前为止,我已经尝试将我的“ foreach”切换为“ for”。我还尝试过更改一些名称,以查看模型绑定器是否是问题所在,但事实并非如此。
这是视图,视图模型和控制器的代码。
查看
@using (Html.BeginForm())
{
@Html.AntiForgeryToken();
for (int i = 0; i < Model.Count(); i++)
{
@Html.DropDownListFor(model => model.ElementAt(i).PickedNormId, Model.ElementAt(i).PickableNorms, UiText.Prosyn.N_A, htmlAttributes: new { @class = "form-control dropdown_search", @name="NormPicker"@*, @onchange = "this.form.submit();"*@ })
}
<div>
<input name="selectedNormList" type="submit">
</div>
}
ViewModel
public class NormPickerViewModel : ViewModel
{
public SelectList PickableNorms { get; set; }
public int PickedNormId { get; set; }
}
控制器
public virtual ActionResult Index()
{
List<NormPickerViewModel> viewModels = new List<NormPickerViewModel>();
viewModels.Add(new NormPickerViewModel()
{
PickableNorms = new SelectList(
_normRepository.GetAll().Where(x => x.Depth == 1).ToList(),
"Id",
"Description"
)
});
return View(viewModels);
}
[HttpPost]
public virtual ActionResult Index(IEnumerable<NormPickerViewModel> selectedNormList)
{
// selectedNormList's count is always zero.
}
通常,我希望可以找到在“获取”中传递的下拉菜单及其更新的选定值,但是我得到的是一个空的枚举。
答案 0 :(得分:0)
我尝试复制您的源代码,您需要更新2个项目,并且它起作用:
在控制器中从MONGO_URL=mongodb://localhost:27017
更改为const dotenv = require('dotenv').config();
console.log(process.env.MONGO_URL); //you can access it straight way
。
在cshtml文件中为选择标签(DropDownListFor)IEnumerable<NormPickerViewModel> selectedNormList
添加名称。
这是控制器代码
IEnumerable<NormPickerViewModel> normPickerViewModel
和cshtml代码
Name = "normPickerViewModel[" + i + "].PickedNormId"