编辑(我已经解决了这个问题):
我已经想到了这一点 - 我在JSON数据中返回一个字符串(integer.ToString(“C”)),然后将其放入我的文本框中。点击提交按钮后,它试图将货币(现在:“£2.99”)解析成一个整数(currentAmount是我的出价对象中的一个整数),这当然变为0,这导致我的出价形式无法生效序列化这些数据。
目前我通过JQuery获得了一个Ajax请求,它在我的BID控制器方法上执行回发。该方法返回一些JSON,它允许我使用当前值更新我的HTML,例如当前价格,出价计数和下一个建议出价。
我的问题是,一旦我点击提交按钮,ajax会发布帖子并正确返回我期望的数据。但是,当我第二次点击“提交”按钮时,从我的视图传递到我的控制器的出价没有我的表单数据(金额现在为0,当我看到它不在页面上时)
这是为什么?我正在使用实体框架来保存我的拍卖和出价。
这是我的代码:
控制器BID帖子
[HttpPost]
public ActionResult Bid(Bid bid)
{
var db = new AuctionsDataContext();
var auction = db.Auctions.Find(bid.AuctionId);
bid.Username = User.Identity.Name;
auction.Bids.Add(bid);
auction.CurrentPrice = bid.Amount;
db.SaveChanges();
return Json(new
{
CurrentPrice = bid.Amount.ToString("C"),
BidCount = auction.BidCount,
Number = (bid.Amount + 1).ToString("C")
});
}
我在Auction.cshtml上的BID表格
<p>
@using (Html.BeginForm("Bid", "Auctions"))
{
var lowestBidAmount = auction.CurrentPrice.GetValueOrDefault(auction.StartPrice) + 1;
<span>
Bid: $@Html.TextBox("amount", lowestBidAmount)
@Html.ValidationMessage("amount")
</span>
@Html.Hidden("auctionId", auction.Id)
<input class="post-bid" type="submit" value="Bid" />
}
</p>
我的Ajax脚本
@section Scripts{
<script type="text/javascript">
$(function () {
$('.post-bid').on("click", function () {
var form = $(this).parent("form");
$.ajax({
type: "POST",
url: form.attr('action'),
data: form.serialize()
})
.success(function (data) {
var template = $('#current-price-template').clone().html();
var html = template
.replace('{{CurrentPrice}}', data.CurrentPrice)
.replace('{{BidCount}}', data.BidCount);
$('.current-price').replaceWith(html);
$('#amount').val(data.Number);
})
.error(function () {
alert("Your big has been rejected");
});
return false;
});
});
</script>
答案 0 :(得分:0)
我无法看到模板的内容,但我的猜测是您要替换附加了click事件的内容,因此当您更换dom元素时,您将失去click事件绑定。这种类型的绑定称为直接绑定。
要实现所需的功能类型,您需要使用委托的绑定样式,其中click事件处理程序绑定到父元素或更高级别,绑定调用中的selector参数指定要处理click事件的哪些元素。这种类型的事件绑定称为委托。替换内容时,处理程序仍然存在,并且可用于处理选择器标识的子元素中的事件。
在你的情况下,像。
form.on('click', '.post-bid',eventHandler);
有关更详细的说明,请参阅jquery .on语句的文档 http://api.jquery.com/on/
答案 1 :(得分:0)
我已经想到了这一点 - 我在JSON数据中返回一个字符串(integer.ToString(“C”)),然后将其放入我的文本框中。点击提交按钮后,它试图将货币(现在:“£2.99”)解析成一个整数(currentAmount是我的出价对象中的一个整数),这当然变为0,这导致我的出价形式无法生效序列化这些数据。