MVC Заполнить раскрывающийся список для создания в представлении из другой модели

Таким образом, у меня в основном та же проблема, что и в этом посте: ASP.NET MVC - Как заполнить выпадающий список другой моделью?

Решение работает... технически... до тех пор, пока модель заполнена. Тем не менее, я работаю с представлением CREATE, в котором действие контроллера просто возвращает пустое "View()", очевидно, потому что оно создает что-то, поэтому у вас еще нет данных... но я, очевидно, все еще хочу, чтобы выпадающий список заполнялся от модели, которая получает данные из БД. Если я пытаюсь запустить этот код в представлении с пустой моделью, я получаю "Ссылка на объект не установлена ​​на объект", когда он пытается получить свойство, которое возвращает список.

Я попытался создать новую пустую модель в действии Create с помощью оператора USING и установить только свойство PropertyTypeList с новым экземпляром модели Type, а затем передать его представлению, и оно вроде работает... представление показалось с выпадающий список другой модели Type заполнен, но он предварительно заполнил кучу типов int/date 0 и 1/1/1900, потому что у меня есть поля, не допускающие значения NULL. На данный момент это самое близкое к тому, чтобы просто позволить пользователю создать новую запись с предварительно заполненным выпадающим списком из полей, получаемых из модели.

Я мог бы просто создать новую модель Type в Create Action и назначить ее Viewbag или Tempdata, что я делал в прошлом, но эта идея просто заставляет меня чувствовать себя ГРЯЗНЫМ. Viewbag исчезает, если человек обновляет страницу, чтобы получить ошибку, и это совершенно непрофессионально. И я не очень часто использую Tempdata, потому что он зависит от состояния сеанса, что становится очень проблематичным, если пользователь открывает мою форму в нескольких вкладках, что может легко произойти.

Я чувствую, что решение из этого поста так близко. Он отлично работает, когда вы работаете с действием EDIT, потому что вы передаете полную модель. Но кто-нибудь знает, как получить выпадающий список, чтобы заполнить таким образом пустую модель? Я пытался что-то вроде добавления дополнительного класса к моей вторичной модели типа

namespace blablanamespace {

    public partial class PropertyType {
    .. bla bla bla propertytype ID and name here
    }

    public class ViewModel
    {
        private readonly List<PropertyType> _keytypes;
        public IEnumerable<SelectListItem> PropTypeItems
        {
            get { return new SelectList(_keytypes, "TypeID", "TypeID"); }
        }
    }
}

а также

@Html.DropDownListFor(model => model.TypeID, new SelectList(new blablanamespace.Models.ViewModel().PropTypeItems))

но тогда я просто получаю эту ошибку:

Значение не может быть нулевым. Имя параметра: элементы

Если я изменю класс ViewModel, чтобы создать новый список типов, таких как

 public class ViewModel
    {
    public class ViewModel
    {
        private readonly List<PropertyType> _keytypes = new List<PropertyType>;
        public IEnumerable<SelectListItem> PropTypeItems
        {
            get { return new SelectList(_keytypes, "TypeID", "TypeID"); }
        }
    }

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

List<ApplicationKeyType> _keytypes = new List<ApplicationKeyType>();

Такое поведение не похоже на то же самое в модели.

0 ответов

Другие вопросы по тегам