簡體   English   中英

在控制器中設置的變量值。 如何在XAML.cs中獲得它?

[英]Variable value set in Controller. How to get that in XAML.cs?

我有一個MVC4應用程序。 在獲取數據庫響應時,我將響應中的特定值分配給靜態變量(在“名稱空間A”中聲明)。 設置它在命名空間B中的運行情況很好。但是,當嘗試在XAML.cs(例如命名空間C)中檢索該值時,它總是返回0。
所有這三個服務器都在服務器上的同一應用程序池下運行。
我知道控制器總是可以將值傳遞給View,然后再從該視圖傳遞到Silverlight。 由於這只是單個值(“長”類型),我想探討是否有一種像全局變量那樣的方法,其值設置在Controller級別並在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文件是預先編譯的,所以我不希望它記錄一次值並一直使用它。我希望每次調用該頁面時都重新加載該值。因為值可能會有所不同)。

感謝您的幫助!

請記住,XAP文件在瀏覽器中運行,因此它位於與服務器端代碼(控制器等)完全不同的域中。

假設您每次頁面加載僅需要加載一次值,則這樣做的方法是使用initParams服務器端設置其值。 只需擴展您已經在做的事情-在DataKeyNameConstants添加“ val3”,設置@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"];
}

現在,您可以在Silverlight應用程序的靜態變量( MyConstants或其他任何變量)中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM