asp.net-mvc - 处理 Next Record 可空引用控制器代码以传递给 viewbag
问题描述
我研究了各种可为空的引用处理帖子,但没有发现任何有用的东西。因此,我在下面处理这个空引用(现在阻止向用户显示错误页面是一种技巧)实际上是在我的编辑控制器中不存在下一条记录时返回当前 id。
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var myInClause = new string[] { "a", "c", "k" };
var myQueryResults = await _context.MyClass.FindAsync(id);
int? NextIdObject = (from i in _context.MyClass
where myInClause.Contains(i.RowType) && (i.Id > myclass.Id)
select new { i.Id }).DefaultIfEmpty().First().Id;
if (!NextIdObject.Equals(0))
{
ViewBag.nextID = NextIdObject;
}
else
{
ViewBag.nextID = id;
}
if (myQueryResults == null)
{
return NotFound();
}
return View(myQueryResults);
}
我宁愿只重定向到索引页面(如果他们遇到这个错误,这意味着他们已经完成了一个队列的工作,这里永远不会存在下一条记录)。或者也许只是保持代码原样并在按钮上显示一条消息以指示列表结束。这里有任何想法。请注意,在 id 上使用任何 +1 增量对我不起作用,因为我不需要用户查看所有 id 记录,只需要带有 a/c/k 的记录,这就是我引入 myInclause 变量的原因。如果有一种更好的方法可以将“IN”的 SQL sytanx 用于 Linq 查询,我全神贯注。
解决方案
我宁愿只重定向到索引页面(如果他们遇到这个错误,这意味着他们已经完成了一个队列的工作,这里永远不会存在下一条记录)
你可以简单地使用 try...catch 块
try
{
var myInClause = new string[] { "a", "c", "k" };
var myQueryResults = await _context.MyClass.FindAsync(id);
int NextIdObject = (from i in _context.MyClass
where myInClause.Contains(i.RowType) && (i.Id > myclass.Id)
select new { i.Id }).DefaultIfEmpty().First().Id;
ViewBag.nextID = NextIdObject;
}
catch(Exception ex)
{
return RedirectToAction("Index");
//or return View("Index");
}
return View(myQueryResults);
推荐阅读
- big-o - i <= n 的大 O 分析;i *= 2 与 i < n; 我 *= 2;
- hive - kylin启动时报错
- c++ - 枚举元组类型的最佳方法?
- google-cloud-platform - 如何从数据流工作者签署 gcs blob
- ios - 错误:点击 UISegmentedControl 时将无法识别的选择器发送到实例
- python - 复制鼠标点击 NameError
- android - Android:相机错误->无法连接到相机
- git - 在私有 Git 存储库中存储 API 密钥/连接字符串
- amazon-web-services - 如何允许 Google Cloud Data Fusion 连接到 AWS RDS MySQL 数据库?
- c# - C# 数组范围