代码之家  ›  专栏  ›  技术社区  ›  Tim Long

ASP.NET MVC 2操作方法接收空参数

  •  0
  • Tim Long  · 技术社区  · 16 年前

    我在开发一个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

    R817 是项目的库存代码。所以,这就是我希望在我的行动方法中看到的。下面是操作方法:

    //
    // GET: /RawMaterial/Details/5
    
    public ActionResult Details(string stockCode)
    {
        return View(repository.GetByStockCode(stockCode));
    }
    

    但是…当action方法执行时,参数(stockcode)为空。

    有什么想法吗?

    2 回复  |  直到 16 年前
        1
  •  4
  •   DM.    16 年前

    您需要接受的参数不应该是“stockcode”,而应该是“id”

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

    public ActionResult Details(string id)
    
        2
  •  1
  •   Mike Chaliy    16 年前

    +1对糖尿病的答案,但你也有另一个选择。你可以为你的案子登记特殊路线。像这样的:

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