我正试图通过在.aspx页面上单击按钮来设置静态类中的字符串值。我不明白为什么这个值总是空的。
这是静态类代码:
public static class XeroApiHelper
{
private static ApplicationSettings _applicationSettings;
public static string WebUrl { get; set; }
static XeroApiHelper()
{
// Refer to README.md for details
string callbackUrl = WebUrl + "/xero/xeroconnection.aspx";
我试图设置的字符串是WebUrl
。
这是点击事件中的代码:
protected void btnXeroConnect_Click(object sender, ImageClickEventArgs e)
{
string weburl = Request.Url.GetLeftPart(UriPartial.Authority);
XeroApiHelper.WebUrl = weburl;
_user = XeroApiHelper.User();
_authenticator = XeroApiHelper.MvcAuthenticator();
var authorizeUrl = _authenticator.GetRequestTokenAuthorizeUrl(_user.Name);
Response.Redirect(authorizeUrl);
}
我们非常感谢任何协助。
这是因为static constructor
。构造函数是在引用任何静态成员之前调用的。这意味着在执行XeroApiHelper.WebUrl = weburl;
行之前已经调用了构造函数。在callbackUrl
中设置null
值
会自动调用静态构造函数来初始化类在创建第一个实例或任何静态成员之前引用。静态构造函数将在实例之前运行构造函数。当类型的静态构造函数分配给事件或委托的方法被调用,而不是在已分配。如果在类,它们将在文本中执行它们在类声明中出现的顺序到静态构造函数的执行。
静态构造函数
编辑:以包括可能的解决方案
将代码从static
构造函数移动到WebUrl
的set
调用,作为:
private static string _WebUrl;
public static string WebUrl
{
get { return _WebUrl; }
set
{
_WebUrl = value;
string callbackUrl = _WebUrl + "/xero/xeroconnection.aspx";
// move rest of code from constructore here
}
}