C# ASP.NET MVC使用EF6加载首页数据如何避免URL带ID
实现方案
你担心的URL带ID的问题完全不会出现,你现有默认路由配置已经满足需求:访问根路径example.com时会自动映射到HomeController的Index动作,整个数据查询逻辑在服务端完成,不需要前端传递ID参数,自然不会在URL拼接额外内容。
你写的传递模型实例的思路是对的,但细节有误,需要做两处调整:
- EF 6 中访问数据集不需要加括号,
db.tblMenuRecords()的写法错误,应改为db.tblMenuRecords - 你需要从数据集中取出单条
tblMenuRecords实例再传给视图,不能直接传递整个数据集
代码修正示例
如果你的tblMenuRecords表仅存储一条全局的周度推荐记录,直接取第一条即可:
public ActionResult Index() { // 从表中取第一条记录,空值判断避免表无数据时页面报错 tblMenuRecords menuRecord = db.tblMenuRecords.FirstOrDefault() ?? new tblMenuRecords(); return View(menuRecord); }
如果你的表存储了多期历史推荐,需要取当前生效的记录,加对应查询条件即可:
// 示例:取标记为生效的最新一条推荐 tblMenuRecords menuRecord = db.tblMenuRecords .Where(m => m.IsActive == true) .OrderByDescending(m => m.CreateTime) .FirstOrDefault() ?? new tblMenuRecords();
补充注意事项
记得在HomeController中重写Dispose方法释放EF上下文资源,避免内存泄漏:
protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); }
内容的提问来源于stack exchange,提问作者CodeQuest
相关产品推荐
相关产品推荐

