2011-04-25 51 views
0

我正在使用@Darin Dimitrov在Loading a partial view in jquery.dialog中解釋的方法,以允許用戶單擊其私人消息之一併在模態框中查看它。我使用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傳遞給服務器。爲此,您需要在客戶端執行一些手動字符串連接。你可以做這樣的事情>

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

你看我們使用的服務器端代碼生成/Message/Conversation然後再連接到它的客戶端,使其/Message/Conversation/?conversationId=valueOfconvId

我希望這是有道理的:)

編輯:

<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> 

現在有意義嗎?我們將點擊的tr的ID保存在全局變量中

+0

是完全合理的。我已經知道了自己(但忘記了更新代碼 - 對此感到遺憾)。但我仍然需要找出一種方法來獲取被點擊的行(tr)的id的值......任何建議? – Kassem 2011-04-25 13:27:04

+0

代碼更新:) – Kassem 2011-04-25 13:30:39

+0

編輯:) – neebz 2011-04-25 13:43:47

相關問題