填充ListBoxfor与视图模型,并传回其内容(Populating ListBoxfor wit

2019-10-20 19:19发布

我在努力弄清楚如何我的模型(未修改)传回回我的控制器。 我已经试过我的视图模型结合到许多不同的HTML.Helpers,什么不是。 我可以让我的数据绑定和显示,但我不能让视图模型回发到我的控制器。

我有以下的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>

我试图通过项目迭代和索引他们像这样的:

//处于包围与不同的助手环

model => model.MediaProviders[i].MediaProviderId

仍然没有传回。 我能得到一些帮助,以什么我做错了吗? 我试着用搜索引擎,但没有真正的价值弹出我的情况。

Answer 1:

您应该包括一个附加属性中查看模型绑定选定值(和改变MediaProvidersSelectList也将使它更容易)

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所选项目)。



文章来源: Populating ListBoxfor with ViewModel and passing back its contents