c# - 输入将正确的选择值返回给控制器,但选择列表不是
问题描述
我的剃刀视图上有条件输入或选择列表。当我将操作直接放在我的表单上时,它可以正常工作;但是当我尝试获取表单值并将其发送到我的控制器时,它不会在选择列表上传递选定的值。
在我的模型中
public MyItemModel()
{
AllowedQuantities = new List<SelectListItem>();
}
public int Quantity { get; set; }
public List<SelectListItem> AllowedQuantities { get; set; }
public int EnteredQuantity { get; set; }
在我看来
<td class="contribute">
<form id="add-to-cart-registry-form">
@if (item.AllowedQuantities.Count > 0)
{
<select asp-for="@item.EnteredQuantity" asp-items="@item.AllowedQuantities" name="enteredquantity" class="qty-dropdown" id="qty-drp"></select>
}
else
{
<input name="enteredquantity" type="text" class="update-textbox gr-item-update-split" value="@item.EnteredQuantity" />
}
<input type="submit" value="Add to Cart" class="update-button gr-item-update-split gr-item-update-split-button" onclick="addProductCartFmRegistry('@Url.Action("AddItemsToCartFromRegistry", new { registryItemId = item.Id, shoppingCartTypeId = (int)ShoppingCartType.ShoppingCart })', '#add-to-cart-registry-form')" />
</form>
</td>
<script>
function addProductCartFmRegistry(addToCartFmRegistryUrl, formselector) {
var atcUrl = addToCartFmRegistryUrl;
var formdata = $(formselector).serialize();
if (AjaxCart.loadWaiting != false) {
return;
}
AjaxCart.setLoadWaiting(true);
$.ajax({
cache: false,
url: atcUrl,
data: formdata,
type: 'post',
success: AjaxCart.success_process,
complete: AjaxCart.resetLoadWaiting,
error: AjaxCart.ajaxFailure
});
}
</script>
和我的控制器
[HttpPost]
public virtual IActionResult AddItemsToCartFromRegistry(int registryItemId, int shoppingCartTypeId, IFormCollection form)
{
}
当我准备我的模型时,我将默认输入数量设置为 1。
如果它来自输入,则将正确的输入值传递给控制器;但如果它是选择列表,它会传递 1 而不是选定的选项。
如果我以我的形式使用动作,它完全可以正常工作:
<td class="contribute">
<form action="@Url.Action("AddItemsToCartFromRegistry", new { registryItemId = item.Id, shoppingCartTypeId = (int)ShoppingCartType.ShoppingCart })" method="post">
@if (item.AllowedQuantities.Count > 0)
{
<select asp-for="@item.EnteredQuantity" asp-items="@item.AllowedQuantities" name="enteredquantity" class="qty-dropdown" id="enteredqty-@item.Id"></select>
}
else
{
<input name="enteredquantity" type="text" value="@item.EnteredQuantity" class="update-textbox gr-item-update-split" id="enteredqty-@item.Id" />
}
<input type="submit" value="Add To Cart" class="update-button gr-item-update-split gr-item-update-split-button" onclick="addProductCartFmRegistry(@item.Id)" />
</form>
</td>
但我想通过 ajax 调用来将 json 警告返回到我的页面。
任何想法 ajax 调用版本缺少什么?以及如何将正确的选定列表项值发送到我的控制器?
解决方案
我没有提到我的问题,但我的 td 处于循环状态。
<td class="contribute">
<form id="add-to-cart-registry-form-@item.Id">
@if (item.AllowedQuantities.Count > 0)
{
<select asp-for="@item.EnteredQuantity" asp-items="@item.AllowedQuantities" name="enteredquantity" class="qty-dropdown" id="qty-drp"></select>
}
else
{
<input name="enteredquantity" type="text" class="update-textbox gr-item-update-split" value="@item.EnteredQuantity" />
}
<input type="submit" value="Add to Cart" class="update-button gr-item-update-split gr-item-update-split-button" onclick="addProductCartFmRegistry('@Url.Action("AddItemsToCartFromRegistry", new { registryItemId = item.Id, shoppingCartTypeId = (int)ShoppingCartType.ShoppingCart })', '#add-to-cart-registry-form-@item.Id')" />
</form>
</td>
刚刚在表单名称上添加了@item.Id,onclick 功能工作正常。
推荐阅读
- python - 棉花糖限制序列化深度
- node.js - 如何设置 max-old-space-size 使其在 OS X 上运行的 NativeScript 的 VS Code 扩展中得到尊重?
- kubernetes - 不合理的没有足够的 CPU 用于部署扩展
- r - ggplot在刻面时删除特定的x轴标签
- java - 如何在 Spring Boot 中将带有前导零的 Integer 绑定到请求有效负载中的 Integer 字段?
- pip - 获取 pip 包的 Yum/RPM 版本 (django-tables2)
- javascript - 无法在 Axios 调用之外获得价值
- c# - 交叉继承实现与EF Core 3.0
- corda - Docker 网络,没有目标提供可接受的证书
- python - 使用 Python 解析 XML 文档