DTO and ViewBag issue MVC C#
本文关键字:MVC issue ViewBag and DTO | 更新日期: 2023-09-27 18:31:37
嗨,我在从两个来源获取数据并合并到一个 DTO 然后发送到视图时遇到问题
我的数据库中有一个用户列表,我的 WCF 服务中有一个作业列表。 我正在尝试做的是创建一个"添加作业"页面,在其中从数据库中获取所有用户当前的作业,并在视图中创建一个新的下拉列表,显示用户没有的所有作业。 因此,我将两个列表相交并创建一个新列表,删除所有获得的作业。
我已经尝试过这样做,但看不到我哪里出了问题。
public ActionResult AddJob(String usrCode)
{
var jobs = jobClient.getAllJobs();
var allJobCodes = (from s in jobs select s.jobCode).ToList();
var thisJobCode = (from s in db.UserJobs
where s.usrCode == usrCode
select s.jobCode).ToList();
var notObtained = allJobCodes.Except(thisJobCode);
IEnumerable<String> list1 = allJobCodes.AsEnumerable();
IEnumerable<String> list2 = notObtained.AsEnumerable();
IEnumerable<String> list3 = list2.Select(x => new UserJobsDTO()
{ jobCode = x });
IEnumerable<UserJobsDTO> list = list3(jobs, notObtained);
ViewBag.jobCode = new SelectList(list, "jobCode", "Description");
var model = new UserJobsDTO { usrCode = usrCode, jobCode = list};
return View("AddJob", model);
}
public class UserJobsDTO
{
public string usrCode { get; set; }
public IEnumerable<String> jobCode { get; set; }
public String Description { get; set; }
}
谁能帮我? 目前的主要问题是工作代码= x抱怨....
Error 1 Cannot implicitly convert type
'string' to 'System.Collections.Generic.IEnumerable<string>'
和列表 3 变量抱怨这个....
Error 2 'list3' is a 'variable' but is used like a 'method'
错误准确地说明了问题所在...
无法隐式转换类型 "string" 到 'System.Collections.Generic.IEnumerable'
作业代码是一个集合:
public IEnumerable<String> jobCode { get; set; }
但是您正在尝试为其分配非集合值:
list2.Select(x => new UserJobsDTO()
{ jobCode = x })
因此,您需要jobCode
一个字符串(以便 DTO 的任何给定实例都有一个值)或将整个集合设置为该字符串(以便 DTO 的任何给定实例都具有值列表)。
"list3"是一个"变量",但像"方法"一样使用
我真的不知道你在这里想做什么:
IEnumerable<UserJobsDTO> list = list3(jobs, notObtained);
但是,正如错误所述,list3
是一个变量而不是一个方法。 不能像调用方法那样调用变量。
您尝试在此代码中完成的内容非常令人困惑。 而且,老实说,此时最好的建议只是在调试器中单步执行,检查您拥有的运行时值,并真正考虑如何为您的视图构建这些值。
特别是,在语义上区分单数值和复数值将非常有帮助。 例如,像UserJobsDTO
或jobCode
这样的术语意味着一定程度的奇点和复数,但它们的类型和结构与此不一致。 (字符串集合怎么可能是单个"代码"?
你正在使用的结构的名称和类型对于能够逻辑地理解和表达你想要做的事情非常重要。