如何在cshtml中显示表单?

时间:2013-10-11 20:49:09

标签: c# asp.net asp.net-mvc razor nullreferenceexception

我一直在尝试使用cshtml显示一个表格很长一段时间,它给了我很多问题。我正在使用ASP.NET MVC。

这是我的控制器代码:

    [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>

错误是:

App_Web_5m4f2la2.dll中发生了'System.NullReferenceException'类型的异常,但未在用户代码中处理

附加信息:未将对象引用设置为对象的实例。

2 个答案:

答案 0 :(得分:3)

可能是您将视图设置为错误的ActionResult。换句话说,如果您将视图设置为Search而没有代码而只设置return View();代码,则会得到System.NullReferenceException因为模型不在该方法范围内。此外,如果您只想显示一个表而不需要用户输入,那么就不需要[HttpGet][HttpPost]

因此,要解决此问题,您可能需要执行以下步骤:

剪切 [HttpPost] Search 中的所有代码并将其粘贴到 [HttpGet] Search中。

然后完全删除 [HttpPost] Search方法。

然后移除 [HttpGet] 上方的<{strong> public ActionResult Search() 以及额外的 return View(); 复制代码后可能会有。

希望这有帮助。

哦,确保将模型传递给视图return View(UserList);

答案 1 :(得分:2)

您没有将SearchModel列表传递给视图。所以视图中的模型为空。

return View("Search", UserList);

这可以解决您的问题。

此外,ASP-MVC基于高度惯例。由于您的操作和视图具有相同的名称(搜索),因此您可以省略对View的调用中的第一个参数:

return View(UserList);