【问题标题】:Input returns the correct selected value to controller but select list is not输入将正确的选择值返回给控制器,但选择列表不是
【发布时间】: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


【解决方案1】:

我没有提到我的问题,但我的 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 功能正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多