Asp.net MVC отправляет данные в контроллер - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь отправить данные в контроллер с помощью Jquery, функция AddToCArt не работает с помощью jquery.

вот мой взгляд:

<div class="row">
    @foreach (var item in Model)
    {
        using (Html.BeginForm())
        {
            @{
                <!--List For Kgs to populate dropDown-->
                List<SelectListItem> KgItems = new List<SelectListItem>();
                KgItems.Add(new SelectListItem { Text = "1 kg", Value = "1" });

                <!--List of Dozens to populate dropDown-->
                List<SelectListItem> DozenItems = new List<SelectListItem>();
                DozenItems.Add(new SelectListItem { Text = "1 Dozen", Value = "1" });

                if (item.WeightType == "Kg")
                {
                    @Html.DropDownList("Weight", (IEnumerable<SelectListItem>)KgItems, new { @class = "form-control" })
                }
                else if (item.WeightType == "Dozen")
                {
                    @Html.DropDownList("Weight", (IEnumerable<SelectListItem>)DozenItems, new { @class = "form-control" })
                } 
            }
        </div>

        <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12 no-padding">
            <input type="submit" class="btn btn-success" id="btnSubmit" value="Add to Cart" />
        </div>

вот мой Jquery: -

<script>
    $("#btnSubmit").click(function () {
        var w8 = $("#Weight option:selected").text();
        alert("Selected Weight " + w8);
        $.post("/Test/AddToCart",
        {
            value: w8
        });
    });

вот мой контроллер: -

public void AddToCart(int value)
{
    if (ModelState.IsValid)
    {
        //here is some code
    }

любая помощь будет оценена.

Ответы [ 6 ]

0 голосов
/ 16 ноября 2018

здесь рабочий вид

<div class="row">
@foreach (var item in Model)
{   
    @using (Html.BeginForm())
    {
       @{
            <!--List For Kgs to populate dropDown-->
            List<SelectListItem> KgItems = new List<SelectListItem>();
            KgItems.Add(new SelectListItem { Text = "1 kg", Value = "1" });

            <!--List of Dozens to populate dropDown-->
            List<SelectListItem> DozenItems = new List<SelectListItem>();
            DozenItems.Add(new SelectListItem { Text = "1 Dozen", Value = "1" });

            if (item.WeightType == "Kg")
            {
                @Html.DropDownList("Weight", (IEnumerable<SelectListItem>)KgItems, new { @class = "form-control" })
            }
            else if (item.WeightType == "Dozen")
            {
                @Html.DropDownList("Weight", (IEnumerable<SelectListItem>)DozenItems, new { @class = "form-control" })
            }
         }
     }
}
</div>

<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12 no-padding">
    <input type="submit" class="btn btn-success" id="btnSubmit" value="Add to Cart" />
</div>

здесь работает Jquery: -

<script>
    $("#btnSubmit").click(function () {
    var w8 = $("#Weight option:selected").val();
    alert("Selected Weight " + w8);
    $.post("/Home/AddToCart",
        {
            value: w8
        });
});

здесь работает контроллер: -

public void AddToCart(int value)
{
    if (ModelState.IsValid)
    {
        //here is some code
    }
}
0 голосов
/ 16 ноября 2018

Пожалуйста, измените следующие битовые изменения и попробуйте.

<input type="submit" class="btn btn-success" id="btnSubmit" value="Add to Cart" />

**TO**

<input type="button" class="btn btn-success" id="btnSubmit" value="Add to Cart" />

И

 $.post("/Test/AddToCart",
        {
            value: w8
        });

**TO**

 $.post('@Url.Action("Test", "AddToCart")',
        {
            value: +w8
        });

И

    public void AddToCart(int value)
    {
        if (ModelState.IsValid)
        {
            //here is some code
        }
    }

**TO**

  [HttpPost]
  public void AddToCart(int value)
    {
        if (ModelState.IsValid)
        {
            //here is some code
        }
    }

РЕДАКТИРОВАТЬ

<div class="row">
    @using (Html.BeginForm())
    {
        foreach (var item in Model)
        {
            @{
                <!--List For Kgs to populate dropDown-->
                List<SelectListItem> KgItems = new List<SelectListItem>();
                KgItems.Add(new SelectListItem { Text = "1 kg", Value = "1" });

                <!--List of Dozens to populate dropDown-->
                List<SelectListItem> DozenItems = new List<SelectListItem>();
                DozenItems.Add(new SelectListItem { Text = "1 Dozen", Value = "1" });

                if (item.WeightType == "Kg")
                {
                    @Html.DropDownList("Weight"+@item.id, (IEnumerable<SelectListItem>)KgItems, new { @class = "form-control" })
                }
                else if (item.WeightType == "Dozen")
                {
                    @Html.DropDownList("Weight"+@item.id, (IEnumerable<SelectListItem>)DozenItems, new { @class = "form-control" })
                } 
            }
            </div>

            <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12 no-padding">
                <input type="buton" class="btn btn-success" onclick="funcationname(@item.id)" id="btnSubmit" value="Add to Cart" />
            </div>
        }
    }
</div>

funcationname(id)
{
var w8 = $("#Weight"+ id + " option:selected").text();
        $.post("/Test/AddToCart",
        {
            value: +w8
        });
}
0 голосов
/ 16 ноября 2018

Ваш using (Html.BeginForm()) находится внутри цикла for. Это означает, что вы создадите столько тегов формы, сколько есть элементов в цикле. Поэтому поместите ваш using (Html.BeginForm()) до начала цикла.

Также это сгенерирует несколько кнопок отправки с одинаковым идентификатором, что абсолютно неверно, поскольку идентификатор html-элемента должен быть уникальным

0 голосов
/ 16 ноября 2018

Возможно, контроллер ожидает целочисленное значение. Быстрая проверка состоит в том, чтобы установить это значение в строку, чтобы увидеть, если оно попадет. В противном случае вы можете попробовать предложение ниже.

Попробуйте разобрать значение веса

var weightValue = parseInt(w8);

Обновлен код ниже:

<script>
$("#btnSubmit").click(function () {
    var w8 = $("#Weight option:selected").text();
    var weightValue = parseInt(w8);
    alert("Selected Weight " + weightValue);
    $.post("/Test/AddToCart",
    {
        value: weightValue 
    });
});

Вопросы:

  • Вы установили точку останова на действии контроллера, и оно получает удар?
  • Любые ошибки консоли связаны со стороной клиента?
0 голосов
/ 16 ноября 2018

Вам может понадобиться атрибут HttpPost в вашем действии.

[HttpPost]
public ActionResult AddToCart(int value)
{
    if (ModelState.IsValid)
    {
        //here is some code
    }

В конце концов, что вы должны сделать в первую очередь, это проверить консоль разработчика вашего браузера, чтобы увидеть, в чем собственно проблема.

0 голосов
/ 16 ноября 2018

Здесь есть несколько вещей, которые могут пойти не так.

Во-первых, вы используете data: Id, но переменная Id, похоже, не определена в этом контексте.Вы действительно имели в виду data: w8?

Во-вторых, вы публикуете данные в форме "data": 123, но ожидаете, согласно вашей декларации действия, данные в форме "value": 123.Они должны быть синхронизированы.

Таким образом, похоже, что ваш почтовый код должен выглядеть так

$.post("/Test/AddToCart",
    {
        value: w8
    });

В-третьих, вы не запрещаете поведение кнопки по умолчанию.Вы можете сделать это с помощью return false или позвонив по номеру preventDefault, например:

$("#btnSubmit").click(function (e) {
    ...
    e.preventDefault();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...