1

C#(Silverlight)でWebページのモーダルダイアログを開くための次のコード行があります。

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

これで、表示しているページで次のようなコードが呼び出され、渡そうとしている値を確実に取得する必要があります(これは、制御できないMSCRM Webページです)。

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文字列になります...しかし、これはJSONオブジェクトではなく、JavaScript内の文字列として終わると思います。

これをどのように機能させるかについてのアイデアはありますか?

いくつかのサイドノート:

  • この呼び出しの結果として生じるモーダルダイアログをIEにデバッグさせることができません。デバッグツールを表示することはできますが、ページを更新できないため、ページに添付されません。
  • このモーダルダイアログを制御することはできません。これは、MSDynamicsCRMを使用して表示されるページです。そのため、JavaScriptなどをテストするために何かをいじることはできません。
4

1 に答える 1

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;");
于 2013-03-12T12:09:22.827 に答える