2011-12-08 3 views
0

사용자가 다른 사용자에게 점수를 추가 할 수있는 사이트에서 작업하고 있지만 사용자가 다른 특정 사용자에게 점수를 추가하면 동일한 사용자에게 점수를 더 추가 할 수 없습니다. 따라서 user1은 user2에 한 지점 만 제공 할 수 있습니다.asp.net 액션에서 반환 자바 스크립트

서버에서 동일한 사용자 이름으로 포인트가 이미 있는지 확인합니다. 모든 일이 멋지게 작동하므로 지금 내가 원하는 것은 사용자에게 이전에 포인트를 추가 했으므로 포인트를 추가 할 수 없다는 메시지를 사용자에게 알리는 것입니다. 나는 내가 필요한 메시지를 표시 할 서버에서 자바 스크립트를 반환하는 것입니다 생각합니다. 그러나 이것에 대한 다른 해결책이있을 수 있습니다. 여기

[HttpPost] 
    public ActionResult AddPointAndCopyCurrentFavToPlaylist(int id) 
    { 
     if (CheckIfPointExists(User.Identity.Name, id)) 
     { 
     var originalSong = repository.GetCurrentFav(id); 

     var newSong = new Song(); 
     newSong.UserName = User.Identity.Name; 
     newSong.Title = originalSong.Title; 
     newSong.YoutubeLink = originalSong.YoutubeLink; 
     newSong.GenreId = 38; 
     newSong.Date = DateTime.Now; 
     repository.AddSong(newSong); 

     var point = new Point(); 
     point.UsernameGotPoint = originalSong.UserName; 
     point.UsernameGavePoint = User.Identity.Name; 
     point.Date = DateTime.Now; 
     point.Score = 1; 
     point.CurrentFavId = id; 
     repository.AddPoint(point); 

     repository.Save(); 
     return RedirectToAction("Index"); 
     } 
     else return JavaScript(???); 
    } 

내 JQuery와 아약스입니다 : 여기 컨트롤러 내 행동은 그가 내가 표시 할 내 아약스 요청의 성공 부분에 포인트로 제공 할 수 없습니다 여부에 따라

$(".btnAddOtherSongPoints").click(function() { 
     var songId = $(this).attr("name"); 

     $.ajax({ 
      beforeSend: function() { ShowAjaxLoader(); }, 
      url: "/Home/AddPointAndCopyOtherSongToPlaylist/", 
      type: "POST", 
      data: { id: songId }, 
      success: function() { HideAjaxLoader(), ShowMsg("Song Added Successfully") }, 
      error: function() { HideAjaxLoader(), ShowMsg("Song could not be added, please try again") } 
     }); 
    }); 

다른 메시지 그래서 나는 데이터 개체가 null이 아닌지 (이 경우에는 서버가 뭔가를 반환했다는 것을 확인하는 if 문이 필요하다는 것을 짐작할 수있다.이 경우에는 javascript 함수 또는 이와 비슷한 것)

답변

1

글쎄, 컨트롤러에서 JavaScript를 반환하면 '컨트롤러'기능으로 '보기'기능을 ixing.

당신은 이것을 할 수 있지만, 당신은 컨벤션에 반대합니다. & 그것은 다음 개발자가 유지하기가 더 어려워 질 수 있습니다.

컨트롤러는 데이터 만 반환해야합니다. JavaScript의 데이터에서 성공 플래그 &의 메시지를 확인할 수 있습니다.

편집 : 컨트롤러에서

:

bool isSuccess = true; 
    //process here 
    return Json(new {Result = isSuccess}, JsonRequestBehavior.AllowGet); 

를 자바 스크립트에서 확인할이 경우 결과 == true를 볼 수 있습니다.

이 같은 것을 사용하여 $의 아약스에 성공 기능을 대체합니다 포인트가 추가되는 경우 나타 내기 위해 왜하지 (JSON 방법 파크 왜 안) 당신의 reponse에 부울 결과를 반환 않았다

success: function (result) { 
    if (!result) 
    { alert('Oh nooes'); } 
}, 
+0

동의하지만 클라이언트 측에서 어떻게 확인하겠습니까? 그리고 서버에서 무엇을 반환합니까? –

+0

샘플 컨트롤러 및보기 코드가 추가되었습니다. –

+0

또한 컨트롤러에서 JavaScript를 반환하지 않는 또 다른 이유는 컨트롤러의 사용을 제한한다는 것입니다. 이 컨트롤러를 다른 페이지에서 사용하고 JavaScript를 반환하지 않으려면 별도의 컨트롤러를 만들어야합니다. –

0

또는 아니. 클라이언트 측에서는이 값을 확인하고 false이면 메시지를 표시합니다. 예 :

var result = true; 
... 
return JSON(new { result }); 
관련 문제