如何在CSHTML中让表单外的数量输入框值被表单使用?
解决方案
方法1:通过JavaScript在表单提交时附加数量值
给表单添加ID,监听提交事件,手动把数量输入框的值加入提交数据:
<div class="mb-3"> <label for="quantity" class="form-label">Quantity:</label> <input type="number" id="quantity" class="form-control d-inline-block" style="width: 100px;" min="1" value="1" /> </div> <div class="d-flex gap-2"> <form id="add-to-cart-form" method="post" asp-page-handler="AddToCart"> <input type="hidden" name="productId" value="@Model.Product.Id" /> <button type="submit" class="btn btn-success">Add to cart</button> </form> <a href="#" class="btn btn-warning ml-2">Buy now</a> </div> <script> document.getElementById('add-to-cart-form').addEventListener('submit', function(e) { const quantityInput = document.createElement('input'); quantityInput.type = 'hidden'; quantityInput.name = 'quantity'; quantityInput.value = document.getElementById('quantity').value; this.appendChild(quantityInput); }); </script>
提交表单时,quantity参数会自动被带上,后端AddToCart处理器可直接接收该值。
方法2:同步数量值到表单内的隐藏字段
在表单中添加隐藏的quantity输入框,监听外部数量框的输入事件,实时同步值:
<div class="mb-3"> <label for="quantity" class="form-label">Quantity:</label> <input type="number" id="quantity" class="form-control d-inline-block" style="width: 100px;" min="1" value="1" /> </div> <div class="d-flex gap-2"> <form method="post" asp-page-handler="AddToCart"> <input type="hidden" name="productId" value="@Model.Product.Id" /> <input type="hidden" id="form-quantity" name="quantity" value="1" /> <button type="submit" class="btn btn-success">Add to cart</button> </form> <a href="#" class="btn btn-warning ml-2">Buy now</a> </div> <script> document.getElementById('quantity').addEventListener('input', function() { document.getElementById('form-quantity').value = this.value; }); </script>
用户修改外部数量框时,表单内的隐藏框会同步更新,提交时自然携带最新数量值。
关于你之前尝试失败的原因
用相同asp-page-handler的表单包裹数量框失效,大概率是因为页面存在多个同handler的表单,导致ASP.NET Core路由匹配冲突;或是表单的method、属性设置有误,引发提交异常。上面两种方法无需调整原有表单结构,可靠性更高。
内容的提问来源于stack exchange,提问作者Quốc Khánh 0031
相关产品推荐
相关产品推荐

