ASP.NET MVC存储库和控制器错误

时间:2017-03-05 21:01:28

标签: c# sql asp.net-mvc

每当我尝试访问OrderHistory页面时,都会收到此错误消息。

参数字典包含参数' Id'的空条目。非可空类型的System.Int32' for method' System.Web.Mvc.ActionResult History(Int32)' in' Mis324Assignments.Controllers.MusicController'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

这是我的控制者:

public ActionResult History(int Id)
    {
        return View(mor.GetHistory(Id));
    }

这是我的存储库:

public List<MusicHistoryModel> GetHistory(int custID)
{
    using (IDbConnection db = new SqlConnection(connectString))
    {
        string sql = @"SELECT OI.OrderId, OI.ASIN, OI.Qty, OI.Title,    OI.Artist, OI.Price, O.OrderDate
                     FROM tblOrders as O join tblOrderItems as OI on O.OrderId = OI.OrderId
                     Where O.CustId = @custID";
        List<MusicHistoryModel> history = db.Query<MusicHistoryModel>(sql,new { custID }).ToList();
        return history;
    }
}

这是我的观点:

@model IEnumerable<Mis324Assignments.Models.MusicHistoryModel>

@{
    ViewBag.Title = "History";
    Layout = "~/Views/Music/_3ColLayout.cshtml";
}

<h2>Order History</h2>

@foreach (var item in Model)
{



    <div class="row" style="padding:4px;">

        <div class="col-md-2">      
                <img src="http://images.amazon.com/images//P@(item.ASIN).01._SCTHUMBZZZ_V1115763748_.jpg"
                     class='productImage' style="margin:0 0 5px 10px;"  />

        </div>
      @item.OrderID
       @item.OrderDate
        @item.title
        @item.artist
        @item.price
        @item.qty


    </div>
}

这是我的ActionLink,重定向到历史记录视图:

   <form action="~/Music/History" method="post" class="enhancement">

         <input type="submit" value="Order History*" /><br />

     </form>

我在我的控制器中传入一个int id,并使用该int id作为custID从我的存储库中获取信息。我不知道为什么错误消息说我没有将任何内容传递给int id参数

3 个答案:

答案 0 :(得分:0)

在查看您的视图实现时,您似乎没有在“历史记录操作”所需的“历史记录”操作中传递ID。

您可以通过以下方式传递id作为参数:

@using(Html.BeginForm("History", "Music",
           new { Id= your_id_should_be_here }, FormMethod.Post, new{  @class="enhancement"})
{
       <input type="submit" value="Order History*" /><br />
}

答案 1 :(得分:0)

提交的答案已经将其作为评论而非答案。

答案 2 :(得分:-2)

我想通了!在我的Action链接上,我没有传入CustID参数。这就是为什么它没有得到任何id参数!