2017-04-13 64 views
-1

在我的viewmodel我做了两个SelectList属性,城市名称来自外部数据库。错误“没有为此对象定义无参数构造函数”。从ViewModel的SelectList

视图模型

namespace Treinreizen.Models.ViewModels 
{ 
    public class ReizenViewModel 
    { 
     public SelectList VanStad { get; set; } 

     public SelectList NaarStad { get; set; } 
    } 
} 

在我的控制器中我使用一个GET方法“Registratie”,用户可以选择的城市和一个POST方法来发布这个城市。问题是我得到错误

“没有为此对象定义的无参数构造函数”。

当我尝试发表我的表单。在堆栈跟踪它说:

“[MissingMethodException:此对象定义无参数的构造函数。]”和“[MissingMethodException:此对象定义无参数的构造函数对象类型“System.Web.Mvc.SelectList ”。]”

控制器

 // GET: Hotels/Registratie 
     public ActionResult Registratie() 
     { 
      stedenServices = new StedenServices(); 
      ReizenViewModel registratieviewmodel = new ReizenViewModel(); 
      registratieviewmodel.VanStad = new SelectList(stedenServices.All(), "StadID", "Stad"); 
      registratieviewmodel.NaarStad = new SelectList(stedenServices.All(), "StadID", "Stad"); 
      return View(registratieviewmodel); 
     } 

     // POST: Hotels/Registratie 
     [HttpPost] 
     public ActionResult Registratie(ReizenViewModel registratie) 
     { 
      if (ModelState.IsValid) 
      { 
       return RedirectToAction("Index"); 
      } 
      return View(registratie); 
     } 

查看

<div class="form-group"> 
     @Html.LabelFor(model => model.VanStad, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(m => m.VanStad, Model.VanStad, "--Selecteer Stad--") 
      @Html.ValidationMessageFor(model => model.VanStad, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.NaarStad, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(m => m.NaarStad, Model.NaarStad, "--Selecteer Stad--") 
      @Html.ValidationMessageFor(model => model.NaarStad, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
+0

可能的重复http://stackoverflow.com/a/12701768/920557 –

+0

这不是MVVM,它的MVC,因此“asp.net - ** mvc **” .ReizenViewModel不是一个视图模型,这是一个模型。你在混合两种不同的模式。 – Will

回答

0

只需添加一个无参数的构造函数来ReizenViewModel,什么也不做:

public ReizenViewModel(){} 
+0

它已经有一个! (编译器在默认情况下创建它) –

0

不能绑定<select>复杂对象的集合(这是什么都VanStadNaarStad都) - 只回发一个简单的值。你的模型需要的属性绑定到,说

public class ReizenViewModel 
{ 
    public int SelectedVanStad { get; set; } 
    public int SelectedNaarStad { get; set; } 

    public SelectList VanStad { get; set; } // recommend you use IEnumerable<SelectListItem> rather than SelectList 
    public SelectList NaarStad { get; set; } 
} 

,并在视图

@Html.DropDownListFor(m => m.SelectedVanStad, Model.VanStad, "--Selecteer Stad--") 
@Html.DropDownListFor(m => m.SelectedNaarStad, Model.NaarStad, "--Selecteer Stad--") 

因为你试图绑定到这是SelectList,则DefaultModelBinder尝试一个属性初始化每个SelectList的一个新实例其中没有参数的构造函数,因此错误

+0

谢谢,但是当我使用IEnumerable时,我必须要做什么? – KevinN

+0

只需使用'public IEnumerable VanStad {get;组; }'而不是'public SelectList VanStad {get;组; }“(但它与您的问题无关 - 只是更好的做法) –

+0

现在说:”其他信息:具有键'SelectedVanStad'的ViewData项是类型'System.Int32',但必须是'IEnumerable < SelectListItem>”。”在我看来:) – KevinN

相关问题