2012-10-29 3 views
0

여기에도 몇 가지 비슷한 질문이 있지만이 문제를 해결할 수 없습니다. 결국 그것이 작동하기 때문에 입찰 거래가 아닌 것 같지만 버튼을 클릭 할 때 Ajax를 사용하여 숨겨진 div (팝업을 모방 함)를 표시하려고하면 디버그 할 때 메서드의 컨트롤러 (ConfirmMaxBid)가 두 번 호출됩니다 (훨씬 더 나는 때때로 더 많은 시간을 느낀다. 그리고 코드를 통해 흐름을 혼합한다. 즉 앞뒤로 움직인다. document.ready버튼을 클릭 할 때 Ajax 함수가 두 번 호출되었습니다.

$('#autobidButton').click(function (e) { 
    e.preventDefault(); 
    var model = 
     { 
      AuctionEventId: $('#AuctionEventId').val(), 
      AuctionId: $('#AuctionId').val(), 
      Amount: $('#Amount').val() 
     }; 
    $.ajax({ 
     url: "/Lot/ConfirmMaxBid", 
     dataType: 'json', 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(model), 
     success: function (data) { 
      var amount = "$" + data.AutobidAmount; 
      $('#returnedCorrectedAmount').html(amount); 
      $('#AutobidAmount').val(data.AutobidAmount); 
      $('#confirmationMessage').text(data.AutobidConfirmationMessage); 
      $('#autoBidConfirmation').show(); 
     } 
    }); 
}); 

그리고 마지막으로이 방법은 (일부가 두 번 이상,이 질문을 피하기 위해 호출 때

다음은보기

@model UI.Models.BidOnAuctionViewModel 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Content/js/BidAndMaxBidConfirmation.js")" type="text/javascript"></script> 

@{ 
    var disableButton = Model.AuctionOpen ? "" : "bid-btn-disabled";  
} 

@using (Html.BeginForm("ConfirmMaxBid", "Lot")) 
{ 
    <fieldset> 
    <div class="lotdetail-maxbid-row"> 
     <label>Your Max Bid</label> 
     @*<input id="Amount" class="radius2 text-box single-line valid" type="text" name="Amount" data-val-required="The Amount field is required." data-val-number="The field Amount must be a number." data-val="true">*@ 
     @if (Model.AuctionOpen) 
     { 
      @Html.TextBoxFor(model => model.Amount, new {@class = "radius2 text-box single-line valid"}) 
     } 
     else 
     { 
      @Html.TextBoxFor(model => model.Amount, new {@class = "radius2 text-box single-line valid", @disabled = "disabled"}) 
     } 
    </div> 
    <input type="submit" id="autobidButton" value="Increase Max bid" class="btn btn-level2 btn-maxbid @disableButton" /> 
    </fieldset> 

    <div id="autoBidConfirmation" class="lotdetail-modal" style="display: none;"> 
    @Html.HiddenFor(model => model.AuctionId) 
    @Html.HiddenFor(model => model.AutobidAmount) 
    @Html.HiddenFor(model => model.AuctionEventId) 
    <h4 id="confirmationMessage"></h4> 
    <span id="returnedCorrectedAmount" class="lotdetail-modal-msg"></span> 
    <input name="button" value="Place bid" type="submit" class="btn btn-level2" /> 
    <input id="cancelAutoBid" name="button" value="Cancel" type="submit" class="btn btn-level2 btn-cancel" /> 
    </div> 
} 

입니다 그리고 여기라는 스크립트의 기능입니다 너무 길어)

public ActionResult ConfirmMaxBid(string button, BidOnAuctionViewModel model) 
    { 
     if(Request.IsAjaxRequest()) 
     { 
      var confirmationMessage = "Confirm your bid"; 
      var correctedAmount = model.Amount; 
      if (!CheckMaxBidFitsIncrementTier(model.Amount, model.AuctionEventId)) 
      { 
       confirmationMessage = "This bid can't be placed, do you want to place the following instead?"; 
       correctedAmount = CalculateNextBidAmountForWrongMaxAmount(model.Amount, model.AuctionEventId); 
      } 

      return Json(new 
      { 
       AutobidAmount = correctedAmount, 
       model.AuctionId, 
       model.AuctionEventId, 
       AutobidConfirmationMessage = confirmationMessage 
      }); 
     } 

     if (button == "Place bid") 
     { 
      //Here's the code to do the stuff when confirming in the partial view 

왜 이런 일이 발생하는지 알고 싶습니다. 사전에

감사

업데이트

어떤 경고 배치 한 후 나는 $ 후 (방법이 바로 성공의 함수의 마지막 행 다음에 다시 호출 볼 (디버깅 아주 원시적 인 방법을 것 같아요) ('#autoBidConfirmation'). show();)

+0

:

같은 뭔가를 시도? 어딘가 시체에서 인라인인가요? –

답변

1

비동기 포스트 백 이후에 문서가 여러 번 준비되었을 수 있습니다. 당신이 당신의 JS를 포함하는 방법

$(document).ready(OnDocumentReady); 

function OnDocumentReady() 
{ 
    $("#autobidButton") 
      .unbind("click", AutoBidFunction) 
      .click(AutoBidFunction); 
} 

function AutoBidFunction(e) 
{ 
    // Code Here 
} 
+0

이벤트는 포스트 백과 상관없이 한 번만 발생합니다. –

+0

글쎄, 나는 그것이 작동하게 만들 수없는 원인으로 고투하고있다. 하지만 서류 안에 경보를 두었습니다. 실제로 두 번 불려서 대답이 맞는 것 같아요 .J는 인라인이 아니에요, 케빈. 이 스크립트는보기에서 참조한 BidAndMaxBidConfirmation.js 안에 있습니다. – mitomed

+0

그래,하지만 네가 맞다고 생각해. 케빈,이 사건은 한 번만 일어난다. 이게 옳은 거니? – mitomed

관련 문제