由于具有连接信息的下拉列表,因此ModelSate无效

时间:2014-12-18 16:24:53

标签: c# asp.net-mvc entity-framework

我有一个完美的程序。但是这个页面的下拉列表只有一列的信息,所以我不得不在这个下拉列表中添加另一列,因为用户会问。当我这样做时,我的ModelState开始变得无效。

错误消息:

  

从“System.String”类型到“SINCO_MVC.Models.SINCO_CONCESSAO”类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换

我没有看到这个错误的原因。

查看:

   <div class="editor-field" id="IDCONCESSAO">
      <%:   Html.DropDownListFor(model => model.SINCO_CONCESSAO, 
    new SelectList(ViewBag.IDCONCESSAO, "Id", "Nome"), string.Empty,        
    new {  @class = "select", style = "width: 250px;" }) %>
    </div>

控制器(我抓住下拉列表的信息):

    // GET: /Concessao/Create
    [Authorize(Roles = "ADMINISTRADOR")]
    public ActionResult Create(SINCO_LOCALIDADE_CONCESSAO model)
    {

        ViewBag.IDCONCESSAO = from p in db.SINCO_CONCESSAO.ToList()
                              join c in db.MUNICIPIOS_VIEW.ToList() on p.IDMUNICIPIO equals c.ID_MUNICIPIO
                              join d in db.SINCO_TIPO_CONCESSAO.ToList() on p.IDTIPOCONCESSAO equals d.IDTIPOCONCESSAO
                              select new
                              {
                                  Id = p.IDCONCESSAO,
                                  Nome = p.IDCONCESSAO + " - " + c.NOME_MUNICIPIO + " - " + d.DSTIPOCONCESSAO
                              };


        PopulateItemChoices(model);
        return View(model);
    }

控制器(后置方法):

    [Authorize(Roles = "ADMINISTRADOR")]
    [HttpPost]
    public ActionResult Create(SINCO_LOCALIDADE_CONCESSAO sinco_localidade_concessao, SINCO_CONCESSAO sinco_concessao)
    {
        if (ModelState.IsValid)
        {

            db.SINCO_LOCALIDADE_CONCESSAO.Add(sinco_localidade_concessao);
            db.SaveChanges();

                        return RedirectToAction("Index");
        }

        ViewBag.IDCONCESSAO = from p in db.SINCO_CONCESSAO.ToList()
                              join c in db.MUNICIPIOS_VIEW.ToList() on p.IDMUNICIPIO equals c.ID_MUNICIPIO
                              join d in db.SINCO_TIPO_CONCESSAO.ToList() on p.IDTIPOCONCESSAO equals d.IDTIPOCONCESSAO
                              select new
                              {
                                  Id = p.IDCONCESSAO,
                                  Nome = p.IDCONCESSAO + " - " + c.NOME_MUNICIPIO + " - " + d.DSTIPOCONCESSAO
                              };

       PopulateItemChoices(sinco_localidade_concessao);

       return View(sinco_localidade_concessao);
   }

型号:

namespace SINCO_MVC.Models
  {
     [MetadataType(typeof(SincoLocalidadeConcessaoMetaData))]
     public partial class SINCO_LOCALIDADE_CONCESSAO
            {
          public List<int> SelectedItemIds { get; set; }

          public IEnumerable<SelectListItem> ItemChoices { get; set; }
      }

    public class SincoLocalidadeConcessaoMetaData
    {

        [Display(Name = "ID LOCALIDADE:")]
        public int[] IDLOCALIDADE { get; set; }

        [Display(Name = "ID:")]
        public int IDCONCESSAO { get; set; }

        [Display(Name = "Localidade:")]
        public virtual LOCALIDADES_VIEW LOCALIDADES_VIEW { get; set; }

        public virtual MUNICIPIOS_VIEW MUNICIPIOS_VIEW { get; set; }
    }
}

1 个答案:

答案 0 :(得分:0)

您收到该错误消息的原因是因为下拉列表返回值类型并且您尝试绑定到复杂对象。您回复所选的IDCONCESSAO值(我假设为int)并尝试将其绑定到SINCO_CONCESSAO。您需要将下拉列表绑定到SINCO_CONCESSAO的属性,例如

Html.DropDownListFor(model => model.SINCO_CONCESSAO.ID, ....)