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