0

很长一段时间以来,我一直在尝试使用 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”类型的异常,但未在用户代码中处理

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

4

2 回答 2

3

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

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

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

然后彻底擦除该 [HttpPost] Search方法。

然后删除 [HttpGet] 上面的内容以及 复制代码后可能拥有public ActionResult Search() 的额外内容。 return View();

希望这可以帮助。

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

于 2013-10-22T06:08:16.603 回答
2

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

return View("Search", UserList);

这应该可以解决您的问题。

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

return View(UserList);
于 2013-10-11T20:55:05.833 回答