ASP.NET MVC将数据发布到控制器

时间:2018-11-16 10:56:46

标签: c# jquery asp.net-mvc

我正在尝试使用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 :(得分:0)

这里很少有可能出错的地方。

首先,您正在使用data: Id,但是在此上下文中似乎未定义变量Id。您实际上是说data: w8吗?

第二,您以"data": 123格式发布数据,但是根据您的操作声明,期望以"value": 123格式发布数据。这些需要同步。

所以您的邮政编码看起来应该像这样

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

第三件事是您没有阻止按钮的默认行为。您可以使用return false或致电preventDefault来这样做,就像这样:

$("#btnSubmit").click(function (e) {
    ...
    e.preventDefault();
});

答案 1 :(得分:0)

您的操作上可能需要HttpPost属性。

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

毕竟,您首先应该做的是检查浏览器开发者控制台,看看实际的问题是什么。

答案 2 :(得分:0)

控制器可能希望传递一个整数值。快速检查是将此值设置为字符串以查看是否成功。否则,您可以尝试以下建议。

尝试解析重量值

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 
    });
});

问题:

  • 您是否在控制器操作上设置了一个断点,它是否受到打击?
  • 是否有链接到客户端的控制台错误?

答案 3 :(得分:0)

您的using (Html.BeginForm())在for循环内。这意味着您将创建与循环中的元素一样多的表单标签。因此,在开始循环之前,请先放置using (Html.BeginForm())

这还会生成多个具有完全相同ID的提交按钮,这绝对是错误的,因为html元素ID必须是唯一的

答案 4 :(得分:0)

请先进行一些更改,然后再尝试。

<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
        });
}

答案 5 :(得分:0)

这是工作视图

<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
    }
}