我有一个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>
我有我的app.xaml.cs我的Mainpage.xaml.cs构造函数就是从那里调用的。 从构造函数中,我有一个调用方法1((
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
}
还有一件事我想问。 如果我们可以通过某种方式实现这一点,那么在长变量的每个赋值上,这个值是否总是被刷新?(即我问题的原因是,由于 .xap 文件是预编译的,我不希望它记录一次值并一直使用它。 我希望每次调用页面时都重新加载它,因为值可能会有所不同(。
感谢您的帮助!
请记住,XAP 文件在浏览器中运行,因此它位于与服务器端代码(控制器等(完全不同的域中。
假设每次页面加载只需要加载一次值,则执行此操作的方法是使用 initParams
在服务器端设置其值。 只需扩展您已经在做的事情 - 将"val3"添加到DataKeyNameConstants
,设置@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
或其他变量(中提供了它。