传入字典的模型是类型1,但是这个字典需要类型2的模型

时间:2014-11-28 14:57:00

标签: c# dictionary asp.net-mvc-5 visual-studio-express

这是我的全部错误:

  

传递到字典中的模型项的类型是' System.Data.Entity.DbSet`1 [application.Models.model]',但此字典需要类型为&#39的模型项; application.Models.TABLE1'

我的观点:

@model application.Models.TABLE1

@{
    ViewBag.Title = "Update";
 }

<h2>Update</h2>

视图的控制器逻辑:

//GET: /TABLE1/Update/

    public ActionResult Update(string id)
    {
        IEnumerable<TABLE2> table2 = db.TABLE2;
        IEnumerable<TABLE1> table1 = db.TABLE1;
        string context = "Data Source=******;Initial Catalog=*******;User ID=******;Password=*****";

        foreach (var row in table1)
        {

            string strAddr = row.ADDRESS1 + "+" + row.CITY + "+" + row.ST + "+" + row.ZIP + "+" + row.COUNTRY;

            GoogleMapsDll.GeoResponse myCoordenates = new GoogleMapsDll.GeoResponse();
            myCoordenates = GoogleMapsDll.GoogleMaps.GetGeoCodedResults(strAddr);
            if (myCoordenates.Results != null && myCoordenates.Results.Length > 3)
            {
                string strLat = myCoordenates.Results[3].Geometry.Location.Lat.ToString();
                string strLong = myCoordenates.Results[3].Geometry.Location.Lng.ToString();

                using (SqlConnection myConnection = new SqlConnection(context))
                {
                    myConnection.Open();
                    string strQueryUpdate = "UPDATE TABLE1 SET Lat = '" + strLat + "' , Lng = '" + strLong + "'" + "WHERE ID = '" + row.ID + "' ";

                    SqlCommand myCommandUpdate = new SqlCommand(strQueryUpdate, myConnection);
                    myCommandUpdate.ExecuteNonQuery();

                }
            }

        }

        return View(table2);

    }

我已经搜索了堆栈溢出,并找到了许多关于类似错误的答案,但我似乎无法找到适合我的错误。我不确定将不同的模型项传递到字典中的位置或原因。任何建议或答案都可能正在发生,或者如何解决这个问题会有所帮助。如果有任何其他信息有用,请询问,我会将其包括在内。

3 个答案:

答案 0 :(得分:4)

您需要在视图中更改模型类型以匹配您作为模型传递的内容。

在您的控制器中,您有

IEnumerable<TABLE2> table2 = db.TABLE2;
// ...
return View(table2);

但在你看来你有

@model application.Models.TABLE1

您需要将单个TABLE1作为模型传递到View(..)或将视图模型更改为

@model IEnumerable<application.Models.TABLE2>

(错误所指的词典是ViewData词典)

答案 1 :(得分:1)

您的视图期望TABLE1的实例作为模型,但您传递的是IEnumerable<TABLE2>。因此,不仅类型不匹配,而且它给出了错误的实体类型。

更改视图以接受IEnumerable,例如:

@model IEnumerable<application.Models.TABLE1>

或者只传递一个实例,例如:

return View(table1.First());

答案 2 :(得分:1)

错误告诉您到底出了什么问题。

您的视图需要一个

类型的对象
@model application.Models.TABLE1

在您的操作方法中,您将table2传递给您的视图,其编译时类型为IEnumerable<TABLE2>,运行时类型为System.Data.Entity.DbSet<application.Models.model>

这些类型不同,因此View不知道如何处理它。