我想知道如何调用VOID方法;位于我的默认代码后面,来自Web用户控件?
该控件包含一个语句,需要使用我在后面的默认页面代码中声明的方法。我只是在后面的控件代码中声明该方法,但该方法将被多次使用,所以理想情况下,我想将它保留在后面的默认代码中,或者甚至将它放在一个类中。
问题在于我已经尝试将其保留在默认public partial class
中,并且我试图创建一个单独的类,但我无法弄清楚如何调用它需要使用它。
Default.aspx.cs中的类:
// This method adds a string to the status output area
public void AddStatusMessage(string type, string message)
{
if (message == string.Empty || type == string.Empty) { return; }
if (type == "success")
{
successMessageList.Add("SUCCESS: " + message);
Session["SuccessMessageList"] = successMessageList;
}
else if (type == "error")
{
errorMessageList.Add(message);
Session["ErrorMessageList"] = errorMessageList;
}
}
用户控件中需要使用该方法的语句:
// did the user enter a provider code but not check the confirmation box?
if (!ConfirmProviderCheckbox.Checked)
{
failed = true;
AddStatusMessage("error", "You must confirm the provider before proceeding.");
}
我认为在用户控件中调用这样的方法:
Namespace.Default.AddStatusMessage("error", "You must confirm the provider before proceeding.");
..但这似乎不起作用。
更新3/24: 好吧,我已经厌倦了在静态方法中创建该类的实例,以允许我从我的用户控件中调用它,但是我得到 Unknown方法' AddStatusMessage()'默认。它好像新实例无法在默认页面类中识别我的原始方法。
public static void PublicStatusMessage()
{
Default Status = new Default().AddStatusMessage();
Status.AddStatusMessage();
}
答案 0 :(得分:1)
如果您的方法AddStatusMessage
是静态的并且位于例如在名为A
的名称空间中以及名为B
的类中,调用它的正确方法是:A.B.AddStatusMessage("some text", "some text");
。
但是,为此,您需要将方法(AddStatusMessage)声明为static
。如果该方法不是静态的,则需要创建B类的实例(使用A.B myB = new A.B();
完成,然后在此实例myB.AddStatusMessage("some text", "some text");
上调用该方法。
如果类与调用类位于同一名称空间中,则无需添加名称空间前缀。
正如在一些评论中已经解释的那样,static无论方法是否返回值都无关紧要。简单地说,关键字static
意味着您可以通过在实现的类中访问来直接调用此方法,并且在此方法中您无权访问实例成员。
如果我理解正确你想要这样的东西:
public static void AddStatusMessage(string type, string message, System.Web.SessionState.HttpSessionState sessionState, List<string> successMessageList, List<string> errorMessageList)
{
if (string.IsNullOrEmpty(message) || string.IsNullOrEmpty(type))
{
return;
}
if (type == "success")
{
if (successMessageList != null)
{
successMessageList.Add("SUCCESS: " + message);
}
if (sessionState != null)
{
sessionState["SuccessMessageList"] = successMessageList;
}
}
else if (type == "error")
{
if (errorMessageList != null)
{
errorMessageList.Add(message);
}
if (sessionState != null)
{
sessionState["ErrorMessageList"] = errorMessageList;
}
}
}
但是你应该考虑一些事情:如果类型既不是“成功”也不是“错误”会发生什么。在这种情况下,使用enum是明智的。通过这种方式,不可能获得“不需要的”值。下一点是:为什么有两个清单?为什么不能将成功和错误同时添加到一个列表中?名单不断......