如何在视图方法签名中为变量赋值?附控制器及仓储方法代码
解决控制器与仓储方法的参数匹配问题
看起来你这里有几个小问题导致int id无法正确传递并匹配到仓储方法的逻辑,我帮你一步步修复:
1. 先修正仓储方法的逻辑错误
你当前的GetPodcastById方法里有两个明显问题:
- 方法参数是
int Id,但内部用了未定义的变量podId,这是笔误 - 用
int类型的Id去匹配字符串类型的NameRoute,类型不匹配(除非NameRoute是数字格式的字符串)
情况一:通过实体的int Id属性查找
如果你的PodcastShow有对应的int Id属性,直接用Id匹配更合理,修改仓储方法:
public PodcastShow GetPodcastById(int id) { // 用LINQ替代foreach,代码更简洁高效 return podcasts.FirstOrDefault(show => show.Id == id); }
情况二:通过数字格式的NameRoute查找
如果业务逻辑确实需要用传入的int id匹配NameRoute(比如NameRoute是"123"这类数字字符串),需要先把int转成字符串:
public PodcastShow GetPodcastById(int id) { string podId = id.ToString(); return podcasts.FirstOrDefault(show => show.NameRoute == podId); }
2. 修正控制器的方法调用
你的控制器里调用的是_Repository.GetById(id),但仓储方法的实际名称是GetPodcastById,所以要修正方法名:
public ViewResult Show(int id) { ShowViewModel showView = new ShowViewModel(); // 修正方法名,匹配仓储的实际方法 showView.Show = _Repository.GetPodcastById(id); ViewBag.title = showView.Show?.collectionName; // 建议加空值判断,避免空引用异常 return View(showView); }
额外提示
建议给showView.Show加个空值判断(比如用?.操作符),防止当找不到对应数据时出现空引用异常。
内容的提问来源于stack exchange,提问作者Marcus Reighter
相关产品推荐
相关产品推荐

