2016-05-24 3 views
-1

Я упомянул несколько вопросов (Q1, Q2) относительно этого вопроса, но я думаю, что мой немного отличается.Ошибка при прохождении объекта модели для просмотра

Я создал страницу входа в систему и при успешном входе в нее должен открыть индексный указатель домашнего контроллера. Поскольку мой индексный вид требует, чтобы модель привязывала данные таблицы, мне нужно передать объект модели вместе с представлением в действии кнопки входа. Надеюсь, вы получите сценарий.

Вот мой Войти Контроллер:

public ActionResult Login() //Get Method for Login 
    { 
     return View("Login"); 
    } 
    [HttpPost] // Post Method on Login 
    public ActionResult Defaults(string username, string password) 
    { 
     FloorFactor ff = new FloorFactor(); // tried to create model object to pass in view 
     try 
     { 
      Login_Details login_detail = db.Login_Details.Single(x => (x.UserName == username) && (x.Password == password)); 
      if (login_detail != null) 
      { 
       return View("../Home/Index",ff); // need to get view Index of home controller. 
      } 
     } 
     catch { } 
     return View("Login"); 
    } 

Необходимой Часть Index.cshtml

@model IEnumerable<Pricing_Tool_Test.FloorFactor> 

@{ 
    ViewBag.Title = "Index"; 
} 

Ошибка: enter image description here

Я знаю, что модель требуется Iennumerable вида модели объекта, но в моем Метод Defaults не позволяет мне передавать объект модели IEnnumerable.

любая помощь, как я могу достичь этого?

Редактировать:

Оба контроллера различны. Кнопка входа в систему должна загружать представление Homecontroller. он генерирует исключение, смотрите на изображении. Если я прокомментирую эту строку, она генерирует ошибку, упомянутую выше. : enter image description here

EDIT 2: Главная/Создать Coding

public PartialViewResult Create() 
    { 
     return PartialView("_CreatePartial"); 
    } 

    // POST: Home/Create 
    [HttpPost] 
    public ActionResult Create([Bind(Include = "FloorFactorPercentage,FromDate,ToDate")]FloorFactor floorfactor) 
    { 

      if (ModelState.IsValid) 
      { 
       db.FloorFactors.Add(floorfactor); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(floorfactor); 

    } 

Inner Exception Image

+0

на ваш взгляд, просто использовать @model Pricing_Tool_Test.FloorFactor , как вы передаете один элемент, так что не нужно IEnumerable –

+0

об успешном входе в систему он загружает таблицу контента на Index.cshtml так что это не единственный элемент, так это требует IEnumerable –

+0

ваш код просто передает один пустой объект с именем 'ff' –

ответ

0

Просто попробуйте ваше имя класса "FloorFactor" без использования IEnumerable.because вы не посылаете список. Думаю, это решит вашу проблему.

@model Pricing_Tool_Test.FloorFactor 
@{ 
    ViewBag.Title = "Index"; 
} 
2

Вы уже понимает проблему, что View ожидает IEnumerable<Pricing_Tool_Test.FloorFactor> и вы проходящее один объект FloorFactor.

Вы можете заполнить модель соответственно и передать его для просмотра как -

List<FloorFactor> model = new List<FloorFactor>(); 
model.Add(ff); 

и передать его в View -

return View("../Home/Index",new List<FloorFactor> { model}); 

Сказав, что, для меня это мало смысла проходить пустую модель для такого контроллера. Если вам не нужна коллекция FloorFactor на ваш взгляд, привяжите ее только с типом, а не IEnumerable.

@model Pricing_Tool_Test.FloorFactor 

Редактировать - После ваших правок, я предлагаю вам пересмотреть свой подход к проектированию.

На высоком уровне, если вход успешно завершен, перенаправляйте на действие вашего контроллера, а не POST. Вам не нужно передавать экземпляр IEnumerable<FloorFactor> в представление.Теперь вы должны иметь элементы управления, привязанные к FloorFactor свойствам в пределах Form. И когда пользователь заполнит эти данные, вызовите действие Create, используя POST в форме submit и сохраните изменения в базе данных.

+0

Слишком быстро набрав, избили меня практически таким же ответом. :) – hutchonoid

+0

@hutchonoid - Тихое совпадение. Дело в том, что я немного замедлен. :) – Yogi

+0

Спасибо за полезный ответ. Это немного помогло мне. используя ваш код, он все равно дает мне erro, но если я пишу 'List model = new List (); return View («link», model) 'Если я добавлю эти две строки, он предоставит мне Index view с пустым результатом. Поскольку я пропускаю пустой объект модели. Итак, любая идея, как я могу передать фактическую модель существующим данным? –

0

Либо вы должны вернуть объект IEnumerable.

Или, на ваш взгляд, вам нужно просто положить его без IEnumerable.

@model Pricing_Tool_Test.FloorFactor 
@{ 
    ViewBag.Title = "Index"; 
} 
Смежные вопросы