2014-11-28 5 views
0

Это вся моя ошибка:модель перешла в словарь типа 1, но этот словарь требует модели типа 2

The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[application.Models.model]', but this dictionary requires a model item of type '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); 

    } 

Я искал переполнение стека и нашел много ответов относительно подобных ошибок, но я не могу найти один t шляпа подходит мне. Я не уверен, где и почему в словарь вводится другой элемент модели. Любые предложения или ответы, которые были связаны с моей проблемой, могут возникать или как это может быть исправлено. Если вам понадобится дополнительная информация, просто спросите, и я включу ее.

+0

Это потому, что 'table2' еще не оценен, он по-прежнему является' IEnumerable' – markpsmith

+0

. Ваша проблема в точности такая же, как обычная проблема при обнаружении этой ошибки. Я не понимаю, как вы «не можете найти то, что подходит» вам. Аргумент View (переменная 'table2') очень явно не содержит экземпляр типа' TABLE1', как и сообщение об ошибке. – svinja

+0

Это потому, что я не совсем понял проблему. Я делаю сейчас, так как вчера я не получал эту проблему и ничего не изменил. – RyeNyeTheComputerScienceGuy

ответ

4

Вам необходимо изменить тип модели в представлении, чтобы оно соответствовало тому, что вы проходите в качестве модели.

В вашем контроллере, у вас есть

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

но по вашему мнению, у вас есть

@model application.Models.TABLE1 

Вам необходимо либо пройти один Table1 в качестве модели в View(..) или изменить модель вашей точки зрения, чтобы быть

@model IEnumerable<application.Models.TABLE2> 

(Словарь об ошибке относится к виду Словарь)

1

Ваше мнение ожидает появление по умолчанию: TABLE1, но вы передаете его IEnumerable<TABLE2>. Таким образом, вы не только имеете несоответствие типов, но и получаете неправильный тип объекта.

Либо изменить свой взгляд, чтобы принять IEnumerable, например:

@model IEnumerable<application.Models.TABLE1> 

Или только передать ему один экземпляр, например:

return View(table1.First()); 
1

ошибка говорит вам, что именно не так.

Ваше мнение ожидает объект типа

@model application.Models.TABLE1 

В вашем методе действий, вы передаете table2 на ваш взгляд, который имеет тип времени компиляции из IEnumerable<TABLE2> и типа выполнения System.Data.Entity.DbSet<application.Models.model>

Этих типов другой, поэтому View не знает, что с ним делать.