【问题标题】:The model item passed into the dictionary is of type X, but this dictionary requires a model item of type Y传入字典的模型项是 X 类型,但是这个字典需要 Y 类型的模型项
【发布时间】:2013-02-06 12:40:27
【问题描述】:

我已经针对该问题搜索了许多答案(有人说即使这是一个错误),但我无法弄清楚我的问题在哪里。我已经清理了所有代码,但是当我看到视图时仍然有错误消息。在逐行调试中一切正常。但最终YSOFD...

这是我的代码:

控制器

    [HttpPost]
    public ActionResult Insert(FormCollection formCollection)
    {
        ViewBag.Tema = (new tema()).Css;

        //Pega dados do formulário
        foreach (string _formData in formCollection)
        {
            ViewData[_formData] = formCollection[_formData];
        }


        GameViewModel selectJogo = new sjnj.Models.GameViewModel();


            string sqlJogo = "SELECT id,nome FROM Jogo where nome like '%" +            ViewData["formNomeGame"].ToString() + "%' ORDER BY NOME";
            DataTable dtBuscajogo = new DataAccess("mjnj").ExecuteDataTable(sqlJogo);
            selectJogo.selectListajogo = new System.Data.DataTable();
            selectJogo.selectListajogo.Columns.Add("id");
            selectJogo.selectListajogo.Columns.Add("nome");

            selectJogo.selectListajogo.Rows.Add("#", "Selecione...");

            if (dtBuscajogo.Rows.Count > 0)
            {
                for (int i = 0; i < dtBuscajogo.Rows.Count; i++)
                {
                    selectJogo.selectListajogo.Rows.Add(dtBuscajogo.Rows[i]["id"], dtBuscajogo.Rows[i]["nome"]);
                }
            }
            else
            {
                ViewBag.MensagemError = "Nenhum jogo encontrado";
            }

    return View("Insert",selectJogo);

模型 -- 请注意,我已经评论了所有内容

namespace sjnj.Models
{
public class GameViewModel
{
    #region Inserir
    //[Display(Name = "Adcionar jogo a sua coleção")]
    //public string lblAdcionarJogo { get; set; }
    //[Display(Name = "Digite o nome do jogo")]
    //public string lblDigiteJogo { get; set; }
    //[Display(Name = "Selecione o jogo")]
    //public string lblSelecioneJogo { get; set; }

    //[Display(Name = "descrição do jogo selecionado")]
    //public string descrJogoSelecionado { get; set; }
    //[Display(Name = "Jogo Selecionado")]
    //public string nomeJogoSelecionado { get; set; }

   // [Display(Name = "Saiba mais")]
   //public string saibaMaisSele { get; set; }

   //[Display(Name = "Jogo digitado pelo usuario")]
   //public string formNomeGame  { get; set; }

    //[Display(Name = "Lista dos jogos")]
   // public DataTable selectListajogo { get; set; }
    #endregion
}
}

我的看法

@model sjnj.Models.GameViewModel

@{
    Layout = "~/Views/Shared/_Home.cshtml";
}

这是我唯一给出错误的观点。只有当我声明视图填写数据时。

编辑:显式错误

传入字典的模型项是类型 'sjnj.Models.RegisterViewModel',但是这个字典需要一个模型 'sjnj.Models.HomeViewModel' 类型的项目。

【问题讨论】:

  • YSOD 何时发生?为插入操作执行 POST 时?
  • 是的!当你第一次打开页面时,没关系!
  • 尝试关闭调试器选项中属性的隐式评估。如果单步执行程序是成功与失败之间的区别,那么调试器可能会通过调用一段在该时间点通常不会被调用(或根本不会被调用)的代码进行干扰。
  • YSOFD = Yello Screen Of The Death :D

标签: c# asp.net-mvc-4 visual-studio-2012


【解决方案1】:

我得到了错误。

我的 MasterPage 也使用了模型。当我调用母版页(布局)时,它使用模型,然后调用视图,而另一个模型搞砸了(我不知道会发生什么。

因此解决方案是为母版页的动态部分制作另一个视图,在这种情况下,是用户菜单。

我不知道该怎么做,但我知道错误在哪里。

【讨论】:

  • 如果您的主视图的一部分需要自己的模型,通常可以提供帮助的一件事是 Html.Action 方法。它使您可以启动一个全新的 ControllerContext 来呈现页面的该部分。
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2017-03-15
  • 2015-07-05
相关资源
最近更新 更多