【问题标题】:How to call a protected void from a public static list如何从公共静态列表中调用受保护的 void
【发布时间】:2013-12-19 15:27:19
【问题描述】:

我有一个带有返回值的公共静态列表,因为我在 AJAX 调用中使用它来调用 [WebMethod]。

我需要从中调用受保护的 void,但我不能从静态中调用非静态成员。

这是我目前调用 PopulateBasedOnOpen 的网络方法,目前是另一个静态:

[System.Web.Services.WebMethod]
public static string CustType(string custtype)
{
    string test;
    test = custtype.ToString();
    PopulateBasedOnOpen(custtype);
    return test;
}

问题在于,在我的 PopulateBasedOnOpen 中,我需要设置在 aspx 中定义的文本框的值,而我无法在静态中进行设置:

protected static string PopulateBasedOnOpen(string CustType) 
{
    //set values of textboxes cant be done here
    return CustType;
}

【问题讨论】:

  • 您需要在 WebMethod 和页面之间以某种方式共享它们。或者通过 Session,或者从用于 aspx 页面的同一数据源加载它们。
  • 我不明白。问题是首先分配它们,如果我不能调用一个方法来使用它,我不知道如何使用它。

标签: c# asp.net ajax webforms


【解决方案1】:

您可以通过ajax调用使用Web方法在服务器端更改服务器controls。由于服务器控制状态在ViewState 中维护,而不是在 ajax 调用中传递。您可以从服务器端返回值并在 javascript / jQuery 中使用该值并将其分配给服务器生成的 html 控件

【讨论】:

  • 我将为多达 100 个或更多不同类型的字段设置多个值,您认为这很容易吗?
  • 我想是的,您可以发送 json 字符串并在客户端使用它。如果您对 jQuery/javascript 不满意,可以查看 asp.net ajax、updatepanel
  • 我可以在方法中做一些强制回发的事情吗?如果我能做到这一点,那么我可能会找到一种不需要所有花哨的东西的方法。
  • 可能会有帮助,madskristensen.net/post/…
  • 这与在视图状态中维护的服务器控制状态无关(有时不是);它的
【解决方案2】:

按概念:

受保护:可在其类中和由派生类实例访问。

静态:可以与类、字段、方法、属性、运算符、事件和构造函数一起使用,但不能与索引器、析构函数或类以外的类型一起使用。类上的 static 修饰符意味着该类不能实例化,并且它的所有成员都是静态的。

确保您符合这些条件才能正确调用您的方法。也许您可以将您的 protected static string PopulateBasedOnOpen(string CustType) 更改为 public static string PopulateBasedOnOpen(string CustType)

【讨论】:

  • 我做了那个更改,但它仍然不允许我更改文本框参数。
  • 确保PopulateBasedOnOpen 位于创建文本框的代码后面。
  • 文本框不是在代码隐藏中创建的,它们是在我之前提到的 aspx 页面中定义的。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 2011-05-25
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2011-09-02
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多