ASP.NET MVC 2 Action Method接收空参数

时间:2010-02-27 21:20:43

标签: asp.net-mvc asp.net-mvc-2

我正在开发一个ASP.NET MVC应用程序的问题。我在网络开发方面仍然相当新,特别是MVC,所以请原谅我这是一个非常愚蠢的新手错误; - )

我有一个显示产品列表的视图。每个产品都有一个“详细信息”链接,我想链接到该产品的详细信息视图。所以,这是视图中的相关标记:

<% foreach (var item in Model) { %>
<tr>
    <td>
        <%= Html.ActionLink("Edit", "Edit", new { id=item.StockCode.ToString() }) %>
        <%= Html.ActionLink("Details", "Details", new { id=item.StockCode.ToString() })%>
    </td>
    <td>
        <%= Html.Encode(item.StockCode) %>
    </td>
    <td>
        <%= Html.Encode(item.Description) %>
    </td>
</tr>

到目前为止一切顺利。当我将鼠标悬停在Web浏览器中的详细信息链接上时,该链接显示为:

  

http://localhost:40733/RawMaterial/Details/R8517

R8517 是商品的股票代码。所以,这就是我希望在我的Action Method中看到的内容。这是行动方法:

//
// GET: /RawMaterial/Details/5

public ActionResult Details(string stockCode)
{
    return View(repository.GetByStockCode(stockCode));
}

但是......当Action方法执行时,参数(stockCode)为空。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您需要接受的参数不应该是“stockCode”应该是“id”

MVC正在尝试将“id = item.StockCode.ToString()”绑定到名为相同的参数。你的行动方法应该是:

public ActionResult Details(string id)

答案 1 :(得分:1)

+1到DM的答案,但你也有另一种选择。您可以为您的案例注册特殊路线。像这样:

routes.MapRoute("RawMaterial",  "RawMaterial/{action}/{stockCode}", 
    new { controller = "RawMaterial", action = "Index" } );