Модель словаря модели представления значение null после добавления в контроллер - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть модель для человека, у которого есть словарь для хранения гендерных значений (значения добавляются в контроллере).Я создал модель представления с классом person и другими свойствами.В контроллере я попытался добавить значения в словарь в личном классе через экземпляр viewmodel.Это не выдает ошибку, но значение словаря всегда равно нулю.Код работает, если я не использую viewmodel и работаю с моделью напрямую.Важный!!!!(Я должен добавить значения в словарь через контроллер) Спасибо за вашу помощь.Пожалуйста, используйте код ниже.В модели:

public class dictionary
{
    [Display(Name ="Dictionary Dropdownlist")]
    public Dictionary<string,string> dpdnDict { get; set; }
}

В ViewModel:

public class dictionaryviewmodel
{
    public dictionary dictInViewModel {
        get { return new dictionary(); }
        set { }
    }
}

В контроллере:

    public ActionResult Index(dictionaryviewmodel dictViewModel)
    {
        dictViewModel.dictInViewModel.dpdnDict.Add("M", "Male");
        dictViewModel.dictInViewModel.dpdnDict.Add("F", "Female");
        return View(dictViewModel);
    }

1 Ответ

0 голосов
/ 20 февраля 2019

Прежде всего, этот код действительно вызывает исключение в этой строке

dictViewModel.dictInViewModel.dpdnDict.Add("M", "Male");

, потому что dictViewModel.dictInViewModel возвращает new dictionary(), а dictViewModel.dictInViewModel.dpdnDict равно null, поскольку dpdnDict нигде не заданов коде.Если вы хотите, чтобы этот код работал, измените ваши классы

public class dictionaryviewmodel
{
    public class dictionaryviewmodel
    {
        //this getter will create dictionary instance only once
        //and will always return the same instance with previously added values
        //also it instantiates dpdnDict object
        public dictionary dictInViewModel { get; } = new dictionary()
        {
            dpdnDict = new Dictionary<string, string>()
        };
    }
}

И я не думаю, что вы передаете какие-либо данные в контроллер по запросу, поэтому я бы также обновил контроллер

public ActionResult Index()
{
    dictionaryviewmodel dictViewModel = new dictionaryviewmodel();
    dictViewModel.dictInViewModel.dpdnDict.Add("M", "Male");
    dictViewModel.dictInViewModel.dpdnDict.Add("F", "Female");
    return View(dictViewModel);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...