我正在努力弄清楚如何将我的模型(未修改)传回给我的控制器。我已经尝试将我的ViewModel绑定到许多不同的HTML.Helpers而不是。我可以将我的数据绑定并显示,但我无法让ViewModel回发给我的控制器。
我有以下ViewModels:
public class MediaProviderViewModel : ViewModelBase
{
public int MediaProviderId { get; set; }
public string MediaProviderName { get; set; }
public static MediaProviderViewModel FromEntity(MediaProvider entity)
{
if (entity == null)
{
return (null);
}
return (new MediaProviderViewModel()
{
MediaProviderId = entity.MediaProviderId,
MediaProviderName = entity.Name,
});
}
public static IEnumerable<MediaProviderViewModel> FromEntityList(IEnumerable<MediaProvider> entities)
{
return entities == null ? null : entities.Select(FromEntity).OrderBy(mp => mp.MediaProviderName);
}
}
public class SystemConfigViewModel : ViewModelBase
{
[DisplayName("Media Providers")]
public IEnumerable<MediaProviderViewModel> MediaProviders { get; set; }
public SystemConfigViewModel()
{
}
public static SystemConfigViewModel FromEntity(Entities db)
{
return new SystemConfigViewModel()
{
MediaProviders = MediaProviderViewModel.FromEntityList(db.MediaProviders)
};
}
}
控制器:
public class SystemConfigController : CommonBaseController
{
//
// GET: /SystemConfig/
public ActionResult Index()
{
SystemConfigViewModel model = SystemConfigViewModel.FromEntity(_db);
return View(model);
}
[HttpPost]
public ActionResult Index(SystemConfigViewModel model)
{
return View(model);
}
查看:
<html>
<body>
@using (Html.BeginForm("Index", "SystemConfig"))
{
@Html.ListBoxFor(model => model.MediaProviders, new SelectList(Model.MediaProviders, "MediaProviderId", "MediaProviderName"), new { @size = "30" })
}
</body>
</html>
我试过迭代这些项目并将它们编入索引:
//用不同帮助者的for循环包围
model => model.MediaProviders[i].MediaProviderId
仍然没有传回来。关于我做错了什么,我能得到一些帮助吗?我试过谷歌搜索,但没有真正的价值突然出现在我的情况下。
答案 0 :(得分:3)
您应该在视图模型中包含一个附加属性以将所选值绑定到(并将MediaProviders
更改为SelectList
也会使其更容易)
public class SystemConfigViewModel : ViewModelBase
{
public IEnumerable<int> SelectedProviders { get; set; } //bind to this
public SelectList MediaProviders { get; set; } // populate this in the controller
}
然后在视图中
@Html.ListBoxFor(m=> m.SelectedProviders , Model.MediaProviders, new { @size = "30" })
当您回发时,SelectedProviders
属性将包含所选项目的ID(MediaProviderId
)。