1

MVC4 アプリケーションがあります。データベースの応答を取得している間、その応答から特定の値を静的変数 (「名前空間 A」で宣言されている) に割り当てています。名前空間 B で正常に発生するように設定します。ただし、XAML.cs (名前空間 C など) でその値を取得しようとすると、常に 0 が返されます
。3 つすべてがサーバー上の同じアプリ プールで実行されています。
コントローラーはいつでも値をビューに、そこから Silverlight に渡すことができることを理解しています。これは単一の値 (「long」型) であるため、値がコントローラー レベルで設定され、XAML.cs で読み取られるグローバル変数のような方法があるかどうかを調べたいと思います。

私のCSHTMLコード:

<object id="slvObject" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="800px"> 
        @{                     
            string sourceValue = @"/../../*.xap";                   
            string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + sourceValue;
            DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);
            sourceValue = sourceValue + "?ignore=" + xapCreationDate.ToString();                             
        }
        <param name="source" value="~/../../*.xap" />
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="windowless" value="true"/>
        <param name="minRuntimeVersion" value="5.0.60818.0" />
        <param name="initParams" value="@DataKeyNameConstants.val1=@val1,@DataKeyNameConstants.val2=@val2"/>
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.60818.0" style="text-decoration:none">
            <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
        </a>

Mainpage.xaml.cs コンストラクターが呼び出されたところから app.xaml.cs があります。コンストラクターから、呼び出し method1() があります

XAML.cs:

private void method1()
        {
            string str = GetApplicationAbsoluteURL() + "/MyController/GetValue?val1=" + _val1.ToString() + "&val2=" + _val2.ToString();
            MyHelper.ReadDataAsynchronously(str, CompleteTask);
        }

コントローラ

public string GetValue(int val1, int val2)
{
    GetValueResponse _valueResponse = _serviceClient.GetValue(val1, val2);
//In this _valueResponse, I get a value Id "_valueResponse.Id" which is of long type.  I would like that value to be sent to XAML.cs (May be if it can be stored in a global variable and used there)
    return _valueResponse.XMLValue; 
}   

次に、コントロールは XAML.cs ファイルのCompleteTaskメソッドに渡されます。

private void CompleteTask(object sender, OpenReadCompletedEventArgs e)
{
//Here is where I would like to read the value and it comes "0" all the time
}

また、もう一つお聞きしたいことがあります。何らかの手段でこれを達成できた場合、この値は long 変数の割り当てごとに常に更新されるでしょうか? (つまり、私の質問の理由は、.xap ファイルが事前にコンパイルされているため、値を一度記録して常に使用したくないということです。ページを呼び出すたびにこれを再ロードしたいです。値が異なる可能性があるため)。

あなたの助けに感謝!

4

1 に答える 1

1

XAP ファイルはブラウザーで実行されるため、サーバー側のコード (コントローラーなど) とはまったく異なるドメインにあることに注意してください。

これを行う方法は、ページの読み込みごとに 1 回だけ値を読み込む必要があると仮定して、 を使用してサーバー側でその値を設定することinitParamsです。すでに行っていることを拡張するだけです。「val3」をDataKeyNameConstants、 set@val3 = your constantに追加して、次を使用します。

<param name="initParams" value="@DataKeyNameConstants.val1=@val1,@DataKeyNameConstants.val2=@val2,@DataKeyNameConstants.val3=@val3"/>

次に、Silverlight コードで値を取得しますApplication_Startup

private void Application_Startup(object sender, StartupEventArgs e)
{
    MyConstants.MyConstant = e.InitParams["MyConstantKey"];
}

MyConstantsこれで、Silverlight アプリ内の静的変数 (または何でも) で使用できるようになりました。

于 2013-10-08T21:55:21.940 に答える