Обработка следующей записи обнуляемый ссылочный код контроллера для передачи в пакет просмотра - PullRequest
0 голосов
/ 27 января 2020

Я исследовал различные недействительные посты обработки ссылок, но не нашел ничего полезного. Итак, что я делаю ниже, чтобы обработать эту нулевую ссылку (на данный момент это хакер, чтобы не показывать пользователям страницу с ошибкой), по сути, вернуть текущий идентификатор, если в моем контроллере редактирования нет следующей записи.

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);
}

Я бы предпочел просто перенаправить на страницу индекса (если они попадают в эту ошибку, это означает, что они все равно работают через очередь, никакой следующей записи здесь никогда не будет). Или, может быть, просто оставьте код как есть и отобразите сообщение на кнопке, чтобы указать конец списка. Любые мысли здесь. Обратите внимание, что использование любого приращения +1 для идентификатора не работает для меня, так как мне не нужно, чтобы пользователь видел все записи идентификатора, только записи с / c / k, поэтому я привожу переменную myInclause. Если есть лучший способ использовать SQL sytanx "IN" для запросов Linq, я весь в ушах.

1 Ответ

0 голосов
/ 28 января 2020

Я бы предпочел просто перенаправить на страницу индекса (если они сталкиваются с этой ошибкой, это означает, что они все равно работают через очередь, здесь не будет никакой следующей записи)

Вы можете использовать блок 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);
...