Невозможно получить SelectList, работающий в ASP. NET MVC - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь заставить мою SelectList работать. Я попытался добавить параметры в классе модели, но не смог заставить работать с ошибкой

Member Testing.TaxIDType не доступен с ссылкой на экземпляр; вместо этого укажите имя типа

, которое я не знаю, как исправить.

Я добавил SelectList элементов в свою модель:

public static List<SelectListItem> TaxIDType = new List<SelectListItem>()
{
    new SelectListItem() { Text = "FEIN", Value = "FEIN" },
    new SelectListItem() { Text = "SSN", Value = "SSN" }
};

Я пытаюсь вызвать представление в представлении, используя следующую инструкцию.

@Html.DropDownListFor(Model => Model.TaxIDType, class.TaxIDType)

Я получаю следующие две ошибки:

'IEnumerable' не содержит определения для «TaxIDType» и недоступный метод расширения «TaxIDType», принимающий первый аргумент типа «IEnumerable», может быть найден (вам не хватает директивы using или ссылки на сборку?)


Член 'Testing.TaxIDType' не может быть доступен со ссылкой на экземпляр; вместо этого укажите название типа

Может ли кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 17 апреля 2020

Вот пошаговое объяснение использования DropDownListFor помощника в вашем случае.

  1. Создайте модель, которая будет содержать коллекцию SelectListItem экземпляров.

    public class MyModel
    {
        public List<SelectListItem> TaxIDType = new List<SelectListItem>()
        {
            new SelectListItem() { Text = "FEIN", Value = "FEIN" },
            new SelectListItem() { Text = "SSN", Value = "SSN" }
        };
    }
    

Примечание: если вы хотите, вы можете даже сделать свойство static, однако вам нужно будет изменить способ ссылки на свойство в посмотреть (объясню в конце концов)

Создайте модель и передайте ее представлению.

public ActionResult Index()
{
    var viewModel = new MyModel();
    return View(viewModel);
}

В представлении укажите, что ваше представление использует класс MyModel. Вы можете сделать это, поместив помощник @model в верхней части окна (файл .cshtml).

 @model WebApplication3.Controllers.MyModel 

Здесь WebApplication3.Controllers - это пространство имен вашей модели. и MyModel это его имя. Не используйте перечисленные пространство имен и модель, но измените их на свои.

Используйте помощник DropDownListFor следующим образом:

 @Html.DropDownListFor(x => ??, Model.TaxIDType)

В этом примере Model - это свойство, которое заполняется платформой, чтобы позволить вашему тузу css a Экземпляр класса, который вы передаете в методе View() внутри контроллера. (MyModel экземпляр в этом случае). Написав Model.TaxIDType, вы ссылаетесь на свойство, которое содержит список элементов для заполнения выпадающего списка. Обратите внимание, что свойство в модели не помечено как static, поэтому мы должны получить к нему доступ через ссылку на экземпляр (модель). Тем не менее, вы действительно можете сделать свойство static. В этом случае вам потребуется изменить вид использования на следующее:

     @Html.DropDownListFor(x => ??, MyModel.TaxIDType)

Последнее, что необходимо упомянуть: взгляните на вопросительные знаки. Чтобы вернуть выбранное значение обратно, вам необходимо сопоставить его с моделью. Один из способов сделать это - расширить модель.

public class MyModel
{
    public string SelectedTaxIdType { get; set; }

    public List<SelectListItem> TaxIDType = new List<SelectListItem>()
    {
        new SelectListItem() { Text = "FEIN", Value = "FEIN" },
        new SelectListItem() { Text = "SSN", Value = "SSN" }
    };
}

и изменить вид

@Html.DropDownListFor(x => x.SelectedTaxIdType, Model.TaxIDType)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...