Asp.net mvc 正在获取操作方法的输入值。Mvc核心&;AJAX

Asp.net mvc 正在获取操作方法的输入值。Mvc核心&;AJAX,asp.net-mvc,asp.net-core,asp.net-ajax,Asp.net Mvc,Asp.net Core,Asp.net Ajax,我是MVC Core的新手,我在这方面遇到了一些困难 我有一个表格,里面有我的产品的一些基本值,我想要的是向我的action方法发送一个quantity值和产品的id。我遇到的问题是,我能够将product.ID发送到action方法,但似乎无法获取输入值。我尝试使用一个按钮而不是我的元素,当我使用它时,我设法得到了输入,但没有得到product.ID @model List<Product> <div id="productList"> <form>

我是MVC Core的新手,我在这方面遇到了一些困难

我有一个表格,里面有我的产品的一些基本值,我想要的是向我的action方法发送一个quantity值和产品的id。我遇到的问题是,我能够将product.ID发送到action方法,但似乎无法获取输入值。我尝试使用一个按钮而不是我的元素,当我使用它时,我设法得到了输入,但没有得到product.ID

@model List<Product>

<div id="productList">
    <form>
        <table>
            @foreach (var product in Model)
            {
                <tr>
                    <td>@product.Name</td>
                    <td>@product.Price</td>
                    <td><input type="text" name="quantity" /></td>
                    <td>
                        <a
                           asp-action="AddProductToCart"
                           asp-route-id="@product.ID"
                           data-ajax="true"
                           data-ajax-method="GET"
                           data-ajax-mode="replace"
                           data-ajax-update="#cartinfo">Add to basket</a>
                    </td>
                </tr>
            }
        </table>
    </form>
</div>

<div id="cartinfo">

</div>

我肯定我缺少一些关于表单如何工作的基本知识,所以我非常感谢在这里得到一些帮助。我一直在用谷歌搜索这个,但我也在努力解决这个问题。非常感谢

您可以改用javascript

@model List<Product>

<div id="productList">
    <form>
        <table>
            @foreach (var product in Model)
            {
                <tr>
                   <td style="visibility:hidden" class="pID">@product.ID</td>
                    <td>@product.Name</td>
                    <td>@product.Price</td>
                    <td><input type="text" name="quantity" class="qty"/></td>
                    <td>

                     <button class="btnAdd" >Add to basket</button>
                    </td>
                </tr>
            }
        </table>
    </form>
</div>

<div id="cartinfo">

</div>
@型号列表
@foreach(模型中的var乘积)
{
@产品ID
@产品名称
@产品价格
加入篮子
}
java脚本

<script type="text/javascript">

    $(document).ready(function () {

        $('.btnAdd').click(function () {
            var PID= $(this).closest("tr").find(".pID").text();
            var Pqty= $(this).closest("tr").find(".qty").text();

            AddtoCart(PID, Pqty);
        });

    }); 

    function AddtoCart(pid,qty) {
            $.ajax({
                url: "@Url.Action("AddProductToCart", "Your Controller")",
                type: 'GET',
                data: { id: pid, quantity: qty},
                datatype: 'json',

                success: function (data) {

                    $('#cartinfo').html(data);

                }
            });
        }

</script>

$(文档).ready(函数(){
$('.btnAdd')。单击(函数(){
var PID=$(this.closest(“tr”).find(“.PID”).text();
var Pqty=$(this.closest(“tr”).find(“.qty”).text();
AddtoCart(PID、Pqty);
});
}); 
函数AddtoCart(pid,数量){
$.ajax({
url:“@url.Action(“AddProductToCart”,“您的控制器”)”,
键入:“GET”,
数据:{id:pid,数量:qty},
数据类型:“json”,
成功:功能(数据){
$('#cartinfo').html(数据);
}
});
}

希望这对你有帮助

您可以尝试将数据ajax属性放入
中,并在视图和操作中的参数中进行以下更改

<div id="productList">
    <table>
        @foreach (var product in Model)
        {
            <tr>
              <form data-ajax="true"
                       data-ajax-url="/Your controllerName/AddProductToCart"
                       data-ajax-method="Post"
                       data-ajax-mode="replace"
                       data-ajax-update="#cartinfo">
               <td>@product.Name</td>
                <td>@product.Price</td>

                <td>
                    <input type="text"  asp-for="@product.quantity"/>
                    <input asp-for="@product.Id" hidden />
                </td>
                <td>
                    <input type="submit" value="Add to basket"/>
                </td>
             </form>
            </tr>
        }
    </table>

哦,伙计,现在我知道开发者说他们1年前的代码是垃圾是什么意思了。不知道是尴尬还是骄傲,哈哈

我现在的解决方案可能是使用JS发布。我也不会把我的“asp route id=“@product.id”放在一个元素上,我可以把它作为一个隐藏的输入并发布出来。哦,数据ajax模式的东西让我更困惑,而不是帮助我,一定要删除它


自我提示:不断改进。:-

非常感谢你的回答!我对JS了解得更多,但我现在正在学习ASP.NET核心MVC课程,所以我尽量不使用JS来拯救我。哈哈。你知道我如何使用标记帮助程序或任何其他方式将值发送到action方法吗?我真的很感激你你的评论,很高兴现在知道至少一种方法:-)我考虑过这样做,但这意味着我必须在我的产品类中添加一个名为Quantity的属性,这感觉像是一种变通方法。但是如果这是“正确”的方法,那么我肯定会这样做。非常感谢
<div id="productList">
    <table>
        @foreach (var product in Model)
        {
            <tr>
              <form data-ajax="true"
                       data-ajax-url="/Your controllerName/AddProductToCart"
                       data-ajax-method="Post"
                       data-ajax-mode="replace"
                       data-ajax-update="#cartinfo">
               <td>@product.Name</td>
                <td>@product.Price</td>

                <td>
                    <input type="text"  asp-for="@product.quantity"/>
                    <input asp-for="@product.Id" hidden />
                </td>
                <td>
                    <input type="submit" value="Add to basket"/>
                </td>
             </form>
            </tr>
        }
    </table>
[HttpPost]
    public IActionResult AddProductToCart( Product product)
    {
        //the stuff you want
    }