传入字典的模型属于类型 1,但此字典需要类型 2 的模型

本文关键字:模型 类型 字典 属于 | 更新日期: 2023-09-27 18:32:19

这是我的全部错误:

传递到字典中的模型项的类型为"System.Data.Entity.DbSet"1[应用程序。Models.model]",但此字典需要类型为"应用程序"的模型项。模型.表1'.

我的观点:

@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);
    }

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

传入字典的模型属于类型 1,但此字典需要类型 2 的模型

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

在您的控制器中,您有

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

但在你看来,你有

@model application.Models.TABLE1

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

@model IEnumerable<application.Models.TABLE2>

(错误所指的字典是视图数据字典)

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

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

@model IEnumerable<application.Models.TABLE1>

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

return View(table1.First());

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

您的视图需要类型的对象

@model application.Models.TABLE1

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

这些类型是不同的,因此视图不知道如何处理它。