2013-03-01 57 views
1

我有下面的代碼行打開在C#中的網頁模式對話框(Silverlight的):的Silverlight將數組傳遞給一個網頁的對話框參數

var so = (ScriptObject)HtmlPage.Window.Invoke(
    "showModalDialog", 
    modalWindowUrl, 
    dialogArgs, 
    "dialogWidth:600px;dialogHeight:600px;"); 

現在,類似下面的代碼被稱爲在頁面上,我展示,我需要確保它得到我想要傳遞(這是一個MSCRM網頁,我沒有控制權)的值:

dialogArgs.items <-- will be an array I pass in 
dialogArgs.items[i].getAttribute("oid") <-- will return something 
dialogArgs.items[i].getAttribute("otype") <-- will return something 
dialogArgs.items[i].values <-- will return something 

我有什麼試圖發送(從我的C#代碼)是這樣的:

dialogArgs = @"{items:[{oid:" + id + ",otype:" + type + "}]}"; 

,這將導致一個JSON字符串...但我猜這只是最終因爲在JavaScript中的字符串,而不是一個JSON對象。

任何想法如何,我得到這個工作?

一些旁註:

  • 我不能讓IE調試模態對話框,從這個通話效果。我可以顯示調試工具,但它不會附加到頁面上,因爲它無法刷新它。
  • 我無法控制此模式對話框。這是使用MS Dynamics CRM顯示的頁面。出於這個原因,我不能亂搞JavaScript或任何東西來測試東西。

回答

1

看起來我贏得了這一個滾草獎勵!無法相信這種情況似乎有多少不尋常。該解決方案最終很簡單,但沒有很好的記錄,所以花了我一段時間來追蹤。以爲我會在這裏分享。

首先,在互聯網上快速搜索發現,我們可以使用此設置如下:

var dialogArgs = HtmlPage.Window.CreateInstance("Object"); 

它給你一個ScriptObject回來。對於屬性:

dialogArgs.SetProperty("items", items); 

設立一個陣列和一個項目應該是這個樣子(我剛剛創建了一個新的GUID這個例子的目的)的一些代碼:

var item = HtmlPage.Window.CreateInstance("Object"); 
item.SetProperty("oid", Guid.NewGuid()); 
item.SetProperty("otype", "account"); 
var items = HtmlPage.Window.CreateInstance("Object"); 
items.SetProperty(0, item); 

最後,只是通過該對象直接到你這樣的對話窗口:

var so = (ScriptObject)HtmlPage.Window.Invoke("showModalDialog", lookUpWindow, dialogArgs, "dialogWidth:600px;dialogHeight:600px;"); 
相關問題