【发布时间】:2016-01-25 11:25:17
【问题描述】:
谁能帮我纠正我在 MVC 中创建视图的问题。通常我只使用添加/视图,它会根据我创建的方法为我搭建一个视图。唯一的问题是,这一次我正在创建一个传递给视图的方法,并且我不断收到此错误消息
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;
}
当我在调试时,所有需要的数据都被传递给我声明的所有正确变量,但视图只是没有玩球。我的印象是脚手架会在 Razor 中自动为我生成一个可用的视图?但是这种方法只是想玩。谁能指出我正确的方向??
【问题讨论】:
-
您不认为错误消息是自我解释吗?您正在使用
var model = new UserJob { userCode = userCode };传递单个 UserJob 对象,但视图需要一个 UserJob 集合。 -
我只想要一个通过,但是如果我将 Razor
@model IEnumerable<UserJob>中的这行代码更改为这行代码@model UserJob它会产生此错误消息CS1579: foreach statement cannot operate on variables of type 'UserJob ' because 'UserJob' does not contain a public definition for 'GetEnumerator' -
这也很明显。当您本身没有集合时,为什么要尝试使用 foreach 循环对其进行迭代?
-
这正是 Scaffolding 产生的。我想它只会迭代一次。我是否需要自己编写 Razor 才能获得预期的结果?
标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor