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>

エラーは次のとおりです。

タイプ 'System.NullReferenceException' の例外が App_Web_5m4f2la2.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

4

2 に答える 2

3

ビューを間違って設定している可能性がありますActionResult。つまり、ビューをSearchコードなしでコードのみに設定すると、モデルがそのメソッド内にないため、return View();が得られます 。System.NullReferenceExceptionまた、テーブルを表示するだけで、ユーザー入力を必要としない場合は、 and は必要ありませ[HttpGet][HttpPost]

したがって、これを修正するには、次の手順を実行することをお勧めします。

内のすべてのコードを切り取り、 内に [HttpPost] Search 貼り付けます [HttpGet] Search

次に、メソッドを完全に消去し [HttpPost] Searchます。

次に、コードをコピーした後に余分にある可能性があるものと一緒に[HttpGet] 上記 を削除します。public ActionResult Search() return View();

お役に立てれば。

ああ、モデルをビューに渡すようにしてくださいreturn View(UserList);

于 2013-10-22T06:08:16.603 に答える