2014-03-13 4 views
0

У меня есть база данных, которая состоит из таблицы «Задания»: job_id (int, первичный ключ), job_nm (nchar (50)). В папке «Модель» я добавляю модель данных Entity ADO.NET.Отображение выбранного значения из списка (MVC)

Контроллер:

namespace ListBox_proj.Controllers 
{ 
    public class HomeController : Controller 
    { 
     myDBEntities1 db = new myDBEntities1(); 

     [HttpGet] 
     public ActionResult Index()`enter code here` 
     { 
      var jobs = db.Jobs; 

      ViewBag.Jobs = jobs;      

      return View(jobs); 
     } 

     [HttpPost] 
     public ActionResult Index(string sel1) 
     { 
      ViewBag.Result = sel1; 

      return View(); 
     }  

    } 
}  

Посмотреть это:

@{ 
    ViewBag.Title = "Index"; 
} 

<html> 
    <head> 

     <meta name="viewport" content="width=device-width"/> 
     <title>Index</title>   

    </head> 

    <body> 
      <h1 class="label">Please, select the job you interested in:</h1> <br /><br /> 

      <select name="sel1" id ="sel1"> 
       <option>All</option> 
       @foreach (var j in ViewBag.Jobs) 
       { 
        <option><p>@j.job_nm</p></option> 
       } 
      </select> 

     <form action="/home/index" method="post"> 
      <input type="submit" value ="Search">   
      <input type="text">@ViewBag.Result</input> 
     </form> 

    </body> 
</html> 

, но когда я выбираю пункт в переключателе, и нажать "Поиск", у меня есть сообщение об ошибке:!

[ введите описание изображения здесь] [1]

СООБЩЕНИЕ НА АНГЛИЙСКОМ - Объект referen ce не устанавливается в экземпляр объекта.

Пожалуйста, помогите! Что я делаю неправильно? Как это исправить?

+0

Почему вы пытаетесь использовать 'ViewBag', когда вы отправляете задания в качестве модели в представление. – Nilesh

ответ

0

У вас есть две проблемы.

Первый заключается в том, что ViewBag.Jobs только заполняется на [HttpGet]; вам нужно будет убедиться, что ViewBag также заполнен в [HttpPost]. Лучшее решение в целом будет использовать правильную модель представления - например,

public class JobViewModel { 
    public Jobs JobsList { get; set; } 
    public string Result { get; set; } 
} 

Просто заселить, что в обоих [HttpGet] и [HttpPost] процедуры, и передать его в View() вызова. Затем добавить:

@model JobsViewModel 

в верхней части представления, чтобы получить к нему доступ через (строго типизированных) Model.JobsList собственности.

Вторичная проблема, с которой вы столкнетесь, заключается в том, что sel не отправляется, так как он выходит за пределы ваших <form> тегов - помните, что единственная информация, представленная в форме, содержится в ней.

Restructure ваш взгляд:

<form action="/home/index" method="post"> 
     <select name="sel1" id ="sel1"> 
      <option>All</option> 
      @foreach (var j in Model.JobsList) 
      { 
       <option><p>@j.job_nm</p></option> 
      } 
     </select> 

     <input type="submit" value ="Search">   
     <input type="text">@Model.Result</input> 
    </form> 

и эта проблема также должен быть решен.