2011-04-25 7 views
0

Loading a partial view in jquery.dialog에서 설명한 @Darin Dimitrov의 방법을 사용하여 사용자가 자신의 비공개 메시지 중 하나를 클릭하고 모달 상자에서 볼 수 있습니다. ASP.NET MVC3과 Razor를 뷰 엔진으로 사용하고 있습니다. 하지만이 작업을 받고 몇 가지 문제가 있어요 ... 아래는 내가 지금까지 시도했습니다 것입니다 :모달 상자에서 해당 대화 열기

메시지가 표에 표시됩니다

<tr id="@item.Id" class="openConversationLink"> 
    <td class="newMessageStatus">@MessageStatus(item)</td> 
    <td class="msgSenderName">@item.Sender</td> 
    <td class="msgSubject">@item.Subject</td> 
    <td class="msgLastUpdated">@item.LastUpdated</td> 
    <td class="modalItemActions"></td> 
</tr> 

그리고 같은 부분보기 내부

,

<script type="text/javascript"> 
    $(function() { 
     $("#conversationModal").dialog({ 
      autoOpen: false, 
      width: 850, 
      height: 600, 
      resizable: false, 
      draggable: false, 
      modal: true, 
      open: function (event, ui) { 
       var convId = ui.attr('id'); 
       alert(convId); 
       $(this).load('@Url.Action("Conversation", "Message", new { conversationId = convId})'); 

      } 
     }); 

     $(".openConversationLink").click(function() { 
      $("#conversationModal").dialog('open'); 
     }); 
    }); 
</script> 

는 기본적으로, 나는 open 핸들러 내부에 eventui 매개 변수를 참조 모르겠어요 : 나는 다음과 같은 스크립트 블록을 얻었다. 그래서 두 가지에 대한 약간의 설명이 감사하겠습니다. 어쨌든, 심지어는 메시지가 내가 그 오류가 점점 계속, 지금은 표시되지 않습니다 기본적으로

Compiler Error Message: CS0103: The name "convId" does not exist in the current context. Source: $(this).load('@Url.Action("Conversation", "Message", new { conversationId = convId})');

을, 나는 실제로 행 일 (대화를 엽니 다에 클릭 할 때까지 그 선이 트리거 얻을 싶지 않아 대화 상자), 메시지 페이지가 열릴 때 실제로 트리거되는 것처럼 보입니다.

UPDATE : 여기

내 jQuery 코드는 이제 : 그것에 대해 할 수있는

$(function() { 
    $("#conversationModal").dialog({ 
     autoOpen: false, 
     width: 850, 
     height: 600, 
     resizable: false, 
     draggable: false, 
     modal: true, 
     open: function (event, ui) { 
      var convId = event.target.attr('id'); 
      alert(convId); 
      $(this).load('Message/Conversation/' + convId); 

     } 
    }); 

    $(".openConversationLink").click(function() { 
     $("#conversationModal").dialog('open'); 
    }); 
}); 

뭐든지? : 당신은 더 이상 갈 전에

답변

1

, 당신은

Url.Action() 메소드는 서버 측에서 노력하고 있습니다> 여기서 중요한 건을 이해할 필요가있다. 전달되는 것은 무엇이든 서버 측에서 결정되어야합니다. Javascript에서 클라이언트 측에서 선언 된 변수는 서버 측 코드를 전혀 알지 못하므로 컴파일러가 서버 측 코드에서 convId를 찾으려고 시도하고 분명히 찾을 수 없습니다. 그래서 그것은 오류를 제공합니다.

이제 우리는 convId를 서버에 전달할 방법을 찾아야한다고 말합니다. 이를 위해서는 클라이언트 쪽에서 수동 문자열 연결을해야합니다. 당신은 당신은 우리가 /Message/Conversation를 생성하는 서버 측 코드를 사용하고 나는 그것이 의미 :

하게 희망이 /Message/Conversation/?conversationId=valueOfconvId

을 만들기 위해 클라이언트 측에서 그것을 연결된 볼

'@Url.Action("Conversation", "Message")' + '?conversationId='+convId

> 같은 것을 할 수 있습니다

편집 :

<script type="text/javascript"> 
var clickedId; 
    $(function() { 
     $("#conversationModal").dialog({ 
      autoOpen: false, 
      width: 850, 
      height: 600, 
      resizable: false, 
      draggable: false, 
      modal: true, 
      open: function (event, ui) { 

       $(this).load('Message/Conversation/' + clickedId); 

      } 
     }); 

     $(".openConversationLink").click(function() { 
      clickedId = $(this).attr("id"); 
      $("#conversationModal").dialog('open'); 
     }); 
    }); 
</script> 

은 이제 의미가 있습니까? 클릭 한 ID를 tr에 저장하고 있습니다.

+0

전적으로 의미가 있습니다. 나는 이미 그것을 알아 냈다. (그러나 여기에 코드를 업데이트하는 것을 잊었다 - 그것에 대해 유감스럽게 생각한다.) 하지만 여전히 행 ID (tr)의 값을 클릭하는 방법을 알아야합니다. 제안 사항이 있습니까? – Kassem

+0

코드 업데이트 : – Kassem

+0

답변 됨 편집 됨 : – neebz

관련 문제