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

时间:2015-08-22 15:17:25

标签: c# asp.net-mvc routes

我正在使用C#ASP.NET MVC开发一个小项目。我的问题是我有一个View,它向用户显示一张包含所有Stock的表格。 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); 
    }

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

1 个答案:

答案 0 :(得分:0)

在不知道如何设置路线的情况下,我们无法分辨 - 但我愿意打赌您没有更改默认路线。如果是这种情况,您可以通过将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,这对于在创建链接时避免拼写错误非常有用。