控制器操作未从视图接收参数

Controller action not receiving parameter from view

我正在用 C# ASP.NET MVC 开发一个小项目。我的问题是我有一个视图,它向用户显示一个包含所有库存的 table。 HTML 代码如下:

        <table border="1">
        <tr>
            <th>Item Id</th>
            <th>Brand</th>
            <th>Model</th>
            <th>Unit Price (€)</th>
            <th>Stand</th>
            <th>Available Quantity</th>
            <th>Operation</th>
        </tr>
        @foreach (StockViewModel stock in Model.Stock)
        {
         <tr>
             <td>@stock.Item_Id</td>
             <td>@stock.Brand</td>
             <td>@stock.Model</td>
             <td>@stock.Unit_Price</td>
             <td>@stock.Stand_Id</td>
             <td>@stock.Available_Quantity</td>
             <td><a href="~/Stock/UpdateStock/@stock.Item_Id">Update</a> | Delete</td>
         </tr>
        }
    </table>

问题是 Item_Id 的值到达控制器时为空:

    public ActionResult UpdateStock(string i)
    {
        StockViewModel stock = new StockViewModel();
        stock.Item_Id = i;
        return View("UpdateStock", stock); 
    }

我已经在网上搜索了小教程,他们总是执行这种操作,但是我的不起作用。你知道我错过了什么吗?

在不知道您是如何设置路线的情况下,无法判断 - 但我敢打赌您没有更改默认路线。如果是这种情况,您可以通过将 UpdateStock(string i) 更改为 UpdateStock(string id).

来解决此问题

检查您的 RouteConfig.cs 并查看您的默认路线。它期望的参数名称是 id,并且会自动将其绑定到操作中“/”后面的任何内容。如果您需要坚持使用变量 i,您可以执行以下操作:

<td><a href="~/Stock/UpdateStock?i=@stock.Item_Id">Update</a> | Delete</td>

除非您想要 create a custom route,否则您必须为名称不是 id.

的参数构建一个查询字符串

您可能还对研究 Razor's ActionLink HTML Helper 感兴趣,这对于在创建链接时避免拼写错误非常有用。