我对ASP.NET很新,但我知道用Java编写一些程序。我想使用ZIP code来查询将返回字符串的数据库,然后使用该字符串查询另一个数据库。我想在同一个控制模型上做这个。我觉得这很容易,听起来很简单。
当我创建控制器时,我把第一个数据库的模型类,到目前为止,我已经到了查询第一个数据库,但现在我有了我想查询第二个数据库的字符串通过DBEntities。
这会显示错误消息:
> The model item passed into the dictionary is of type
> 'System.Collections.Generic.List`1[FinalBallot.Models.AgainCandidate]',
> but this dictionary requires a model item of type
> 'System.Collections.Generic.IEnumerable`1[FinalBallot.Models.ZipTable]'.
有没有办法以简单的方式解决这个问题?
public class Default1Controller : Controller
{
private CandidatesDBEntities db = new CandidatesDBEntities();
public string districString = "";
//
// GET: /Default1/
public ViewResult Index(string searchString)
{
var queryZip = from s in db.ZipTables select s;
var queryCandidates = from s1 in db.AgainCandidates select s1;
double sT = 0;
//method so it doesnt display the whole db
if (String.IsNullOrEmpty(searchString))
{
queryZip = queryZip.Where(s => s.ZipL.Equals(0));
}
if (!String.IsNullOrEmpty(searchString))
{
sT = double.Parse(searchString);
queryZip = queryZip.Where(s => s.ZipL.Equals(sT));
try
{
districString = queryZip.ToList().ElementAt(0).District;
}
catch
{
}
if (!String.IsNullOrEmpty(districString))
{
queryCandidates = queryCandidates.Where(s1 => s1.District.Equals(districString));
}
}
return View(queryCandidates.ToList());
}
答案 0 :(得分:0)
在您看来,您是否将模型指定为IEnumerable<ZipTable>
?您传递给视图的模型是IEnumerable<AgainCandidate>
,因此如果您将模型指定为其他模型,则会出现错误。您需要将视图中的模型更改为IEnumerable<AgainCandidate>
。
更新: 根据您的修订说明,您可以做一些事情: 1)创建一个“ViewModel”,它为您要在页面上显示的每个集合都有两个属性,如下所示:
public class MyViewModel
{
IEnumerable<ZipTable> Zips { get; set; }
IEnumerable<AgainCandidate> Candidates { get; set; }
}
在您的操作方法中实例化并将其作为模型返回。这将是我的首选方法。
2)在您的操作方法中将两个集合存放在ViewData包中:
ViewData["Zips"] = queryZip.ToList();
ViewData["Candidates"] = queryCandidates.ToList();
return View(ViewData);
您可以在视图中提取此数据,如下所示:
@foreach (var zip in ViewData["Zips"] as IEnumerable<ZipTable>)
{
...
}