在asp.net WebService中,将WebControl传递给WebMethod

在asp.net WebService中,将WebControl传递给WebMethod,asp.net,web-services,webmethod,asp.net-webcontrol,Asp.net,Web Services,Webmethod,Asp.net Webcontrol,我使用的是asp.NET4,C#,VS2010。 我遇到了一个问题,调用了一个web服务方法,该方法将WebControl作为参数 /// <summary> /// Summary description for FormsViews /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile

我使用的是asp.NET4,C#,VS2010。 我遇到了一个问题,调用了一个web服务方法,该方法将WebControl作为参数

/// <summary>
/// Summary description for FormsViews
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

public class FormViews : System.Web.Services.WebService
{
    [WebMethod]
    public void SetCaption(System.Web.UI.WebControls.Button bt)
    {
        //Code...
    }
}
//
///FormsView的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
公共类formview:System.Web.Services.WebService
{
[网络方法]
public void SetCaption(System.Web.UI.WebControls.Button bt)
{
//代码。。。
}
}
它编译时没有错误。 在运行时,我收到以下消息:

命名空间“namespace”中的XML元素“EnableTheming”已存在于当前作用域中。使用XML属性为元素指定另一个XML名称或命名空间


您能解释一下为什么web服务不接受WebControl以及如何处理此问题吗?

web服务不接受WebControl,因为它不可序列化,而且良好的web服务设计不会直接操纵视图或用户界面。视图的逻辑应该留在视图中,而不是通常的业务层中。处理视图或网页中的语言支持的一种典型方法是向web服务发出一个请求,该请求指示该网页应支持的语言,并返回一个作为键/值对的标签列表。键是控件的ID,值是控件中应显示的内容。只有当您的web页面使用大量Ajax时,这才是必要的。如果只是在服务器上呈现页面,则可以在服务器上呈现控件时使用正确的语言填充控件。这讨论了如何做到这一点

你为什么需要这样的东西?一个按钮属于它的页面,不应该被序列化。你想用这个方法实现什么?我可以看到它名为SetCaption(),但我不明白为什么要发送按钮控件?更完整的函数接收System.Web.UI.ControlCollection,我在其中将数据库中的所有标题/文本等设置到每个控件。这是通过aspx页(This.page.Controls)传递的。我把问题简化了。这样我可以很容易地改变语言。但这有什么关系?我明白你的意思。如果我使用这种方法,我可以返回一个包含键值对的字典,它将表示我的ID/值吗?既然这也是seialized,所以问题没有解决,…@Programmer-你说,“既然这也是序列化的,所以问题没有解决…”为什么问题没有解决?字典是可序列化的,而控件不是。您可以在web服务中以多种格式返回词典。我提出的另一个重要观点是,如果在服务器上呈现页面,甚至不必调用web服务。您正在服务器上呈现页面吗?它说我无法返回字典,因为它是IDICTIONARY。我确实渲染了它们,但所有的文本都来自数据库,我希望我的Web服务支持我的许多站点。所有数据库逻辑都在WebServiceSystem中。InvalidOperationException:无法反映。System.NotSupportedException:不支持System.Collections.Generic.Dictionary类型,因为它实现了IDictionary。下面是一个博客,展示了序列化词典的一种方法。下面是有关asp.net web应用程序本地化和全球化的更多具体信息。