【问题标题】:Use AJAX to pass the value from the text box to Controller action使用 AJAX 将文本框中的值传递给控制器​​操作
【发布时间】:2021-12-16 15:29:11
【问题描述】:

我有一个编辑页面,我试图只更新一个字段,视图如下所示。我只允许用户更新项目数量的一个字段,OrderQuantity 是字段

...
   <div class="form-group">
        <label asp-for="OrderQuantity" class="control-label"></label>
        <input asp-for="OrderQuantity" class="form-control" />
        <span asp-validation-for="OrderQuantity" class="text-danger"></span>
    </div>
</form>
<form asp-action="EditItem">
    <input type="hidden" id="inventoryorderId" name="inventoryorderId" value="@Model.InventoryOrderId" />
    <input type="hidden" id="inventoryId" name="inventoryId" value="@Model.InventoryId" />
    <input type="hidden" id="orderedQuantity" name="orderedQuantity" value="OrderQuantity" />
    <input type="submit" value="Edit" />
</form>

我需要将新输入的值传递给 EditItem 操作方法,因为根据新输入的值,我需要相应地更新库存数量,如下所示

public async Task<IActionResult> EditItem(int? inventoryorderId, int? 
inventoryId, int? orderedQuantity)
{
    var inventoryOrder = await _context.InventoryOrders
         .FirstOrDefaultAsync(io => io.InventoryOrderId == inventoryorderId);
    int curentQuantity = inventoryOrder.OrderQuantity;
    inventoryOrder.OrderQuantity = (int)orderedQuantity;
     _context.SaveChanges();

    var intData = await _context.Inventories.FindAsync(inventoryId);
    if ((int)orderedQuantity > curentQuantity)
    {
        intData.QuantityAvailable = intData.QuantityAvailable - ((int)orderedQuantity- curentQuantity);
        _context.Update(intData);
        await _context.SaveChangesAsync();
    }
    else if ((int)orderedQuantity < curentQuantity)
    {
        intData.QuantityAvailable = intData.QuantityAvailable + (curentQuantity - (int)orderedQuantity);
        _context.Update(intData);
        await _context.SaveChangesAsync();
    }
    return RedirectToAction("Index", "Orders", new { custEmail = "xyz@ff.org" });
}

我无法将新/更新的用户输入值传递给操作方法的问题

<input type="hidden" id="orderedQuantity" name="orderedQuantity" value="OrderQuantity" />

这会将 null 值传递给 orderedQuantity 到 EditItem 操作

<input type="hidden" id="orderedQuantity" name="orderedQuantity" value="@Model.OrderQuantity" />

将数据库中的旧值 orderedQuantity 传递给编辑操作

如何捕获用户输入的内容并将其传递给控制器​​,以便我可以执行一些计算

***** 编辑 ******

我试图删除两个表单,现在只有一个表单像

<form asp-action="EditItem">
 <div asp-validation-summary="ModelOnly" class="text-danger"></div>
 ..............
 <div class="form-group">
   <label asp-for="OrderQuantity" class="control-label"></label>
   <input asp-for="OrderQuantity" class="form-control" />
   <span asp-validation-for="OrderQuantity" class="text-danger"></span>
 </div>
    
  <input type="hidden" id="orderId" name="orderId" value="@Model.OrderId" />
   <input type="hidden" id="inventoryorderId" name="inventoryorderId" value="@Model.InventoryOrderId" />
   <input type="hidden" id="inventoryId" name="inventoryId" value="@Model.InventoryId" />
   <input type="hidden" id="orderedQuantity" name="orderedQuantity" value="OrderQuantity" />
   <input type="submit" value="Edit" /> 
    </form>

即使现在输入 OrderQuantity 的用户仍为 null

【问题讨论】:

    标签: c# asp.net ajax asp.net-core entity-framework-core


    【解决方案1】:

    问题很可能是这样的:

    <input type="hidden" id="orderedQuantity" name="orderedQuantity" value="OrderQuantity" />
    

    您的隐藏输入值是字符串“OrderQuantity”。您可以使用“@Model.OrderQuantity”设置初始值,但这不会传递您在输入控件中所做的更改。

    通常,编辑给定模型的输入控件将包含在提交它们的表单中。您似乎有两个表单,其中第二个用于提交更改。 (是否曾经提交过第一个表单?)如果这两个表单是必需的,那么您可以在输入控件上连接一个 JavaScript 事件,以在更改后更新 orderQuantity 隐藏输入上的值,以便该值可以与第二个一起提交形式。您可能需要注意两个表单之间的字段/参数的命名,以确保避免出现任何可能重复 ID 的情况。

    【讨论】:

    • 对不起,我不确定我是否关注我只有一个表格可以更新记录,没有两个表格可以编辑/更新
    • @ 我试图解释我尝试将用户输入的值传递给操作value="OrderQuantity" - 他传递的空值并通过 value="@Model.OrderQuantity" 再次传递数据库中的任何内容而不是用户输入的值
    • 声明了(至少)两种形式:&lt;/form&gt; &lt;-end of one form then &lt;form asp-action="EditItem"&gt; 您对该字段的输入控件在第一种形式的范围内 &lt;input asp-for="OrderQuantity" class="form-control" /&gt; asp-for 是 ASP,Net 将值链接到的编辑时。因为此控件不在提交的表单中,所以该隐藏控件只是尝试传递字符串“OderQuantity”。如果您想从第二个表单提交,您需要在输入控件上编写一个事件处理程序脚本,以便在其更改时将其值复制到隐藏控件。
    • 我不确定是否可以以相同的形式将值传递给按钮,因此创建了一个新的并尝试传递。我可以在同一个按钮中使用该按钮并仍然可以访问这些值吗?你能举个例子我如何在同一个表单中传递
    • 我试图将表单更改为一个,但我仍然在 &lt;input type="hidden"&gt; value="OrderQuantity" 上具有相同的行为,这传递了 null 值,并且通过执行 value="@Model.OrderQuantity" 再次传递了其中的任何内容数据库不是用户在页面上输入的值
    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2011-10-02
    相关资源
    最近更新 更多