簡體   English   中英

ASP.NET MVC將數據發布到控制器

[英]Asp.net MVC post data to controller

我正在嘗試使用Jquery將數據發布到控制器,jquery不會添加AddToCArt函數。

這是我的看法:

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

任何幫助將不勝感激。

這里幾乎沒有什么地方會出錯。

首先,您正在使用data: Id ,但似乎在此上下文中未定義變量Id 您實際上是指data: w8嗎?

其次,您正在以"data": 123形式發布數據,但是根據您的操作聲明,期望以"value": 123形式發布數據。 這些需要同步。

所以看起來您的發布代碼應該像這樣

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

第三件事是您沒有阻止按鈕的默認行為。 您可以使用return false或調用preventDefault這樣做,如下所示:

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

您可能需要在操作上使用HttpPost屬性。

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

畢竟,您首先應該做的是檢查瀏覽器開發人員控制台,以了解實際的問題所在。

控制器可能希望傳遞一個整數值。 快速檢查是將此值設置為字符串以查看是否成功。 否則,您可以嘗試以下建議。

嘗試解析權重值

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

問題:

  • 您是否在控制器動作上設置了一個斷點,並且擊中了?
  • 是否有任何控制台錯誤鏈接到客戶端?

您的using (Html.BeginForm())在for循環內。 這意味着您將創建與循環中的元素一樣多的表單標簽。 因此,在開始循環之前,請先放置using (Html.BeginForm())

同樣,這將生成多個具有完全相同ID的提交按鈕,這絕對是錯誤的,因為html元素ID必須唯一

請先進行一些更改,然后再嘗試。

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

這是工作視圖

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM