【发布时间】:2019-05-10 16:52:41
【问题描述】:
我的剃刀视图上有一个条件输入或选择列表。当我将操作直接放在我的表单上时,它可以正常工作;但是当我尝试获取表单值并将其发送到我的控制器时,它不会在选择列表中传递选定的值。
在我的模型中
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 调用版本缺少什么吗?以及如何将正确的选定列表项值发送到我的控制器?
【问题讨论】:
-
你试过使用@Html.TextBox吗?
-
我的输入没有问题。输入传递正确的输入值,选择列表不传递。 IE 如果 AllowedQuantities 的值为 2、4、6、8 无关紧要,无论我选择哪个仍然通过 1。
标签: c# razor model-view-controller formcollection selectlistitem