【问题标题】:ActionLink to pass a input value from a different table cell to controller methodActionLink 将输入值从不同的表格单元格传递到控制器方法
【发布时间】:2018-03-08 06:26:07
【问题描述】:

我在 MVC 中工作。 我有一张有一堆行的桌子。一个单元格包含一个“订购”按钮,另一个单元格包含一个数字输入,用户可以在其中指定他想要购买的商品的数量?如何从输入单元格传递 ActionLink 中的数量值?这里的问题不是查找文本值,而是查找特定行的文本值

表格单元格

        <td><input id="itemQuantity" type="number" value="1" min="1" max="@item.QuantityInStock" size="10" class="universalWidth"/></td>
        <td>@Html.ActionLink("Order", "OrderTuckShop", new { id = item.IngredientId, quanity = ???}, new { @class = "btn btn-success universalWidth" })</td>

方法调用

public ActionResult OrderTuckShop(Guid? id, int quantity)

【问题讨论】:

  • @S.Akbari,怎么样?
  • 检查重复的答案。
  • @S.Akbari 这不一样,因为我的文本值应该来自与按钮单击相同的行。我的麻烦是在行上找到正确的输入。您标记为重复的答案与表格或单元格值没有任何关系
  • Action 链接助手是在服务器上处理的,因此您将无法获取文本框的值并相应地生成链接,因为页面本身并未在浏览器中呈现。解决方法是将 onclick 事件附加到 ActionLink,然后在函数中您可以找到文本框的值并生成另一个 http get 调用。检查此SO 帖子

标签: c# asp.net-mvc actionlink


【解决方案1】:

您不能在 ActionLink() 方法中添加文本框的值,因为它的剃刀代码,并且在发送到客户端之前在服务器上进行了解析。为了响应客户端事件,您需要使用 javascript/jquery。

创建一个手动链接并将IngredientId 添加为data- 属性并添加一个额外的类名以用作选择器

<td>
    <a href="#" data-id="@item.IngredientId" class="order btn btn-success universalWidth">Order</a>
</td>

另外,去掉输入中的id="itemQuantity"(重复的id属性是无效的html)并添加一个类名作为选择器

<input class="quantity" type="number" ... />

然后包含以下脚本来读取输入的值并进行重定向

var baseUrl = '@Url.Action("OrderTuckShop")';
$('.order).click(function() {
    var id = $(this).data('id');
    var quantity = $(this).closest('tr').find('.quantity').val();
    location.href = baseUrl + '?id=' + id + '&quanity=' + quanity;
});

但是,方法的名称表明您可能应该进行 POST,而不是 GET?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多