2013-08-23 4 views
0

내 뷰 중 하나 인 스코어링 컨트롤러의 인덱스 뷰에서 일부 이미지를 표시하고 javascript를 사용하여 클릭 할 수있게 만듭니다. 이미지를 클릭하면 배열을 채 웁니다. 사용자가 제출 단추를 클릭하면 배열이 스코어링 컨트롤러의 Score 메서드에 문자열로 전달됩니다. 이 방법으로 모든 데이터를 설정할 수 있으며 Chrome 디버거를 사용하여 네트워크 탭을 볼 때 새로운 '점수'보기가 렌더링되는 것처럼 보입니다.하지만 실제 브라우저를 보면 새로운 것은 표시되지 않습니다. 이전과 같은 이미지 목록이 계속 표시됩니다. 내 View가 제대로 렌더링되지 않는 이유는 무엇입니까?MVC4의 HttpPost 메서드가 올바른 뷰를 반환하지 않습니다.

채점/JS Index.cshtml

$(document).ready(function() { 
    $(function() { 
     $("img").click(function() { 
      // Add and remove border for image 
      if ($(this).hasClass('selectedCard')) { 
       $(this).removeClass('selectedCard'); 

       for (var i = 0, len = cardIdList.length; i < len; i++) { 
        if (cardIdList[i] === $(this).attr('id')) { 
         cardIdList.splice(i, 1); 
         alert(cardIdList.toString()); 
         break; 
        } 
       } 
      } 
      else 
      { 
       $(this).addClass('selectedCard'); 
       var id = $(this).attr('id'); 
       cardIdList = (typeof cardIdList != 'undefined' && cardIdList instanceof Array) ? cardIdList : []; 
       cardIdList.push(id); 
       alert(cardIdList.toString()); 
      } 

     }); 

     $(".button").on('click', function() { 
      $.post("@Url.Action("Score", "Scoring")", { CardIds: cardIdList.toString()}); 
     }); 

    }); 

}); 

ScoringController

public ActionResult Index() 
    { 
     var cards = cardDB.Cards.ToList(); 
     return View(cards); 
    } 

    [HttpPost] 
    public ActionResult Score(string CardIds) 
    { 
     // splits up CardIds string into List 
     List<string> cardIdList = new List<string>(); 
     cardIdList.AddRange(CardIds.Split(new char[] { ',' })); 
     CardDeck deckToScore = new CardDeck(); 
     List<Card> cardsToAdd = new List<Card>(); 

     for (int i = 0, len = cardIdList.Count(); i < len; i++) 
     { 
      var card = cardDB.Cards.Find(Convert.ToInt32(cardIdList[i])); 
      cardsToAdd.Add(card); 
     } 
     deckToScore.Deck = cardsToAdd; 
     return View(deckToScore); 
    } 
} 

Score.cshtml

{ ViewBag.Title = "점수"@
@model GoStopPrimer.Models.CardDeck 

; }

@for (int i = 0, len = @Model.Deck.Count; i < len; i++) 
{ 
    <img alt= @Model.Deck[i].Name, src= @Model.Deck[i].CardArtUrl id= @Model.Deck[i].CardId /> 
} 

답변

1

당신은 $.post하지만이 응답 아무것도 가진 AJAX 요청을하고 있습니다. 아마도 $.post 전화에 success 콜백을 제공하려했거나 콜백을 전달하는 .done() 메서드를 호출했을 것입니다.

참조 : http://api.jquery.com/jQuery.post/

+0

그것은 내가 포스트 방법으로 "보기"를 반환되었다 밝혀 ... 그리고 당신은 내가 그것으로 아무것도하지 않은, 맞아. 방금보기를 렌더링 할 것으로 예상 했었지만 대신 이전보기의 div에 대신 표시했습니다. 고맙습니다!! –

관련 문제