RazorPages: неопределенный ключ в viewData не вызывает исключение - PullRequest
0 голосов
/ 13 января 2020

Я играю с Razor Pages в ядре ASP. NET в качестве учебного упражнения, и одна вещь, которую я заметил, когда пытался использовать неопределенный ключ в viewData, это то, что не было выдано исключение. Я предполагаю, что это предназначено, но мне интересно ... почему? И как мне go об обнаружении таких ошибок? Кажется, было бы легко сделать опечатку и ужасно трудно заметить, пока не стало слишком поздно. Пример:

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;

namespace Infodawn.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }

        public void OnGet()
        {
            // doesn't throw exception, even though viewData["bar"] is undefined:
            ViewData["foo"] = ViewData["bar"];

            // throws exception, as expected:
            Dictionary<string, int> dict = new Dictionary<string, int>();
            int a = dict["bar"];
        }
    }
}

1 Ответ

1 голос
/ 13 января 2020

Если элемент ViewData не был установлен, он будет null. Поэтому перед началом работы с элементами ViewData вам следует проверить нулевое значение:

if(ViewData["bar"] != null)
{
    //
}

При работе с любым API, использующим "magi c string" (например, строковые индексаторы), существует риск опечаток. работая там в коде и вызывая ошибки et c. Одним из общих решений c является использование констант для представления значений ключа.

В Razor Pages рекомендуется использовать Свойства PageModel для передачи данных из контроллера в представление вместо ViewData.

...