0

我对ASP.NET很陌生,但我知道一点 Java 编程。我想使用邮政编码查询将返回字符串的数据库,然后使用该字符串查询另一个数据库。我想在同一个控制模型上做到这一点。我认为这很容易,而且听起来很容易。

当我创建控制器时,我放置了第一个数据库的模型类,到目前为止,我已经查询了第一个数据库,但是现在我有了字符串,我想通过 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());
    }
4

1 回答 1

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>) 
{
    ...
}
于 2012-10-12T18:49:57.953 回答