【发布时间】:2017-09-07 17:10:57
【问题描述】:
我是 mvc 的初学者,正在开发一个电子商务网站。 在我的购物车列表中,我需要输入特定数量来计算总价而不刷新页面。 我在 foreach 语句中使用了一个 java 脚本调用,它起作用了,就像当我输入数量并单击“TotalPrice”字段时,价格将自动计算并显示。
但是现在当我点击“TotalPrice”字段时,我需要用新输入的数量和总价更新我的数据库
我正在尝试ajax但不熟悉它
我的看法
<table class="table">
@{
int i = 0;
foreach (var item in lscart)
{
i = i + 1;
<tr>
<td>@Html.HiddenFor(modelItem => item.CProductID, new { htmlAttributes = new { @class = "form-control", @id = "pid" + @i } })</td>
<td>
@{
var base64 = Convert.ToBase64String(item.CImage);
var imgSrc = String.Format("data:image/jpg;base64,{0}", base64);
<img src='@imgSrc' style="width:100px; height:100px;" />
}
</td>
<td>@Html.DisplayFor(modelItem => item.CProductName)</td>
<td>Rs.</td>
<td>@Html.EditorFor(modelItem => item.CPrice, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", @id = "cprice" + @i } })</td>
<td>
<div class="col-md-6">
@Html.EditorFor(modelItem => item.Cquantity, new { htmlAttributes = new { @class = "form-control", @placeholder = " Qty", @id = "qt" + @i } })
</div>
</td>
<td>
<div>
@Html.EditorFor(modelItem => item.CTotalPrice, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", @placeholder = " Total Price", @id = "total" + @i, @onclick = "edValueKeyPress(" + @i + ")", @onkeyup = "edValueKeyPress(" + @i + ")" } })
</div>
</td>
<td><a href="#"><i class="fa fa-close"></i></a></td>
</tr>
}
}
</table>
我的 javascript 用于在不刷新页面的情况下计算总价
<script>
function edValueKeyPress(i) {
//alert(i);
var edValue = document.getElementById("qt" + i);
var edValue1 = document.getElementById("cprice" + i);
var s = edValue.value * edValue1.value;
var t = document.getElementById("total" + i);
t.value = s;
}
</script>
我的 ajax 代码(这还没有完成,我不知道在我看来在哪里调用这个 ajax 函数)
<script type="text/javascript">
$(document).ready(function () {
alert('ready');
var quantity = document.getElementById("qt" + i);
var proid = document.getElementById("pid" + i);
var price = document.getElementById("cprice" + i);
$.ajax({
url: '/Products/Cartup',
type: "GET",
data: { quantity: quantity, proid: proid, price: price },
dataType: "JSON",
success: function (rslt) {
},
error: function (rslt) {
}
});
})
</script>
我的控制器操作方法
public ActionResult Cartup(int quantity, int proid,float price)
{
var Cert = (from cert in db.TBL_Cart where cert.CProductID == proid select cert).FirstOrDefault();
if (Cert != null)
{
int priceint= Convert.ToInt32(price);
Cert.Cquantity = quantity;
Cert.CTotalPrice = quantity * priceint;
db.Entry(Cert).State = EntityState.Modified;
db.SaveChanges();
}
return View();
}
我的数据库表设计
https://i.stack.imgur.com/mh9F7.png
我使用 db 的完整源代码
https://www.dropbox.com/s/4iegq4kpsoqoue1/backup%20of%20indianhub.zip?dl=0
控制器:产品控制器, 查看:购物车清单
【问题讨论】:
-
首先,如果您要更新某些内容,则需要使用“发布”请求。其次,您可以在输入框上创建一个事件侦听器来触发 ajax 调用,或者使用“提交”按钮来推送这些更改。然后只需添加一个点击处理程序。
-
如果我理解正确,您想在更改
quantity字段时内联保存您的购物车? -
是的,我认为内联可能是技术词
-
什么是
pid或proid?你从哪里得到的?它没有在你的cshtml中定义
标签: javascript ajax asp.net-mvc