2013-10-11 3 views
0

Я пытался отобразить форму с использованием cshtml в течение некоторого времени, и это дало мне много проблем. Я использую ASP.NET MVC.Как отобразить форму в cshtml?

Это мой код контроллера:

[HttpGet] 
    public ActionResult Search() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Search(Models.SearchModel user) 
    { 

     List<Models.SearchModel> UserList = new List<Models.SearchModel>(); 

     MySqlConnection connection = DBConnect.getconnection(); // setting connection to database 
     MySqlCommand cmd = new MySqlCommand("GetUsers", connection); // search for procedure called "GetData" 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add(new MySqlParameter("?search", MySqlDbType.VarChar)); // search parameters, if not looking for anythinf gets all the data 
     cmd.Parameters["?search"].Value = "%" + "" + "%"; 
     cmd.Parameters["?search"].Direction = ParameterDirection.Input; 

     MySqlDataReader dr = cmd.ExecuteReader(); // telling program to read Data 
     while (dr.Read()) 
     { 
      int id = Convert.ToInt16(dr["ID"]); 
      string user_name = Convert.ToString(dr["user_name"]); // converting data to a string 

      Models.SearchModel UserMod = new Models.SearchModel(id, user_name); 

      UserList.Add(UserMod); 

     } 

     dr.Close(); // close 

     DBConnect.CloseConnection(connection); // closes connection 


     return View("Search"); 
    } 

Моя модель:

namespace AOSExpress.Models 
{ 
    public class SearchModel 
{ 
    private int id; 
    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    private string user_name; 

    public string User_Name 
    { 
     get { return user_name; } 
     set { user_name = value; } 
    } 

    public SearchModel(int i, string usnm) 
    { 
     id = i; 
     user_name = usnm; 

    } 
} 
} 

и мой Search.cshtml:

@model IEnumerable<AOSExpress.Models.SearchModel> 

@{ 
ViewBag.Title = "Search"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 


@foreach (var item in Model) 
{ 
    @Html.Partial("_SearchModel", item) 
} 

и _Search.cshtml

@model AOSExpress.Models.SearchModel 

    <table style="font-family: Arial; border:1px solid black; width: 300px"> 
    <tr> 
     <td><b>ID:</b></td> 
     <td>@Model.Id</td> 
    </tr> 
    <tr> 
     <td><b>Username:</b></td> 
     <td>@Model.User_Name</td> 
    </tr> 

</table> 

Ошибка:

Исключение типа «System.NullReferenceException» произошло в App_Web_5m4f2la2.dll, но не был обработан в пользовательском коде

Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.

+0

Не используйте Partial – Gandarez

+1

, вы передаете строку «поиск» на ваш взгляд, ожидая, что коллекция поисковой модели – Rex

+0

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

ответ

3

Это может быть, что вы настраиваете вид на неверный ActionResult. Другими словами, если вы установите представление на Search без кода и только код return View();, вы получите System.NullReferenceException, потому что модель не входит в этот метод. Кроме того, если все, что вы хотите сделать, это отобразить таблицу и не требовать ввода пользователем, на самом деле нет необходимости в [HttpGet] и [HttpPost].

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

Cut весь код внутри[HttpPost] Searchи вставить его в[HttpGet] Search.

После этого полностью удалите метод[HttpPost] Search.

Затем удалите[HttpGet]надpublic ActionResult Search()вместе с дополнительнымreturn View();вы, возможно, после копирования кода снова.

Надеюсь, это поможет.

О, и убедитесь, что вы передаете модель на вид return View(UserList);.

2

Вы не передадите свой список SearchModels в представление. Таким образом, модель в представлении имеет значение null.

return View("Search", UserList); 

Это должно решить вашу проблему.

Кроме того, ASP-MVC основан на принципе конвенции. Так как ваши действия и вид имеют одинаковое название (Search) можно опустить первый параметр из вашего вызова Вида:

return View(UserList); 
+0

Я попробовал добавить 'UserList', но он дал мне ту же ошибку. – DiegoAR

+0

Можете ли вы обновить свой вопрос с помощью полной трассировки стека? Если вы отлаживаете это в Visual Studio, поместите точку останова в начале поиска(), возникает ли исключение до или после точки останова? –

Смежные вопросы