Ввод возвращает правильное выбранное значение в контроллер, но список выбора не - PullRequest
0 голосов
/ 10 мая 2019

У меня есть условный ввод или выберите список в моем представлении бритвы.Когда я помещаю действие непосредственно в мою форму, оно отлично работает;но когда я пытаюсь получить значение формы и отправить его на мой контроллер, оно не передает выбранное значение в список выбора.

В моей модели

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?И как отправить правильное значение выбранного элемента списка на мой контроллер?

1 Ответ

0 голосов
/ 11 мая 2019

Я не упомянул о своем вопросе, но мой телевизор был в курсе.

<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 работает отлично.

...