2016-01-25 38 views
-1

任何人都可以帮助我纠正在MVC中创建视图的问题。通常我只是使用添加/视图,并基于我创建的方法为我搭建了一个视图。唯一的问题是,这一次我创建一个方法,通过查看和我不断收到此错误信息不正确的模型传递给视图MVC C#错误

The model item passed into the dictionary is of type 'UserJob', 
but this dictionary requires a model item of type 
'System.Collections.Generic.IEnumerable`1[UserJob]'. 

我写的方法有以下...

public ActionResult AddJob(string userCode) 
{ 
    var jobs = jobsClient.GetAlljobs(); 
    var alljobsCode = (from s in jobs select s.jobCode).ToList(); 
    var usersJobs = (from s in db.UserJobs 
           where s.userCode == userCode 
           select s.jobCode).ToList(); 
    var jobsNeeded = alljobsCode.Except(usersJobs); 
    List<UserJobsDTO> list = listBuilder(jobs, jobsNeeded); 
    ViewBag.jobCode = new SelectList(list, "jobCode", "jobDescription"); 
    var model = new UserJob { userCode = userCode }; 
    return View("AddJob", model); 
} 

private List<UserJobsDTO> listBuilder(
       jobsService.jobsDTO[] jobs, IEnumerable<string> jobsNeeded) 
{ 
    List<UserJobsDTO> d = new List<UserJobsDTO>(); 

    var f = jobsNeeded.ToArray(); 
    var a = jobs.ToArray(); 

    for (int i = 0; i < f.Length; i++) 
    { 
     d.Add(new UserJobsDTO() 
     { 
      jobCode = f.ElementAt(i), 
      description = a[i].jobDescription 
     }); 
    }    
     return d; 
} 

当IM调试所有需要的数据被传递给我所宣称的所有正确的变量,但视图只是不玩球。我的印象是脚手架会自动在剃刀中为我生成一个可用的视图?但是这种方法只是想玩。任何人都可以指出我在正确的方向?

+1

难道你不认为该错误信息是_self explanatory_?您正在使用'var model = new UserJob {userCode = userCode};'传递一个UserJob对象,但该视图需要一个UserJob集合。 –

+0

我只想要一个通过,但如果我改变这行代码在剃刀'@model IEnumerable '只是这行代码'@model UserJob'它产生这个错误消息'CS1579:foreach语句不能操作变量'UserJob'类型,因为'UserJob'不包含'GetEnumerator'的公共定义 –

+0

这也很明显。当你自己没有一个集合时,你为什么要用_foreach_ loop来迭代它呢? –

回答

0

修正版本

public ActionResult AddJob(string userCode) 
{ 
    var jobs = jobsClient.GetAlljobs(); 
    var alljobsCode = (from s in jobs select s.jobCode).ToList(); 
    var usersJobs = (from s in db.UserJobs 
           where s.userCode == userCode 
           select s.jobCode).ToList(); 
    var jobsNeeded = alljobsCode.Except(usersJobs); 
    List<UserJobsDTO> list = listBuilder(jobs, jobsNeeded); 
    ViewBag.jobCode = new SelectList(list, "jobCode", "jobDescription"); 
// var model = new UserJob { userCode = userCode }; 
    return View("AddJob", usersJobs); 
} 

,你将需要通过ienumarable这里不是一个对象类型。

更新

@model IEnumerable<UserJobs> 

foreach(var item in Model){ 
    <span>@item.JobId</span> 
    <span>@item.JobName</span> 

} 
+0

我知道只有一个userCode是唯一的,所以我不想在那里有单个'var model = new UserJob'?正如我将作业添加到单个用户代码 –

+0

在附注中,最好的做法是将'model'作为UserJob类型进行删除,因为您知道它肯定是UserJob类型。 – James

+0

如果你想要单个用户代码,你必须改变模型为@model UserJob – maztt

相关问题