в asp.net WebService, передавая WebControl в WebMethod

Я использую asp.net 4, C#, VS 2010. Я столкнулся с проблемой, вызвав метод веб-службы, который имеет 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...
    }
}

Он компилируется без ошибок. Во время выполнения я получаю это сообщение:

Элемент XML «EnableTheming» из пространства имен «namespace» уже присутствует в текущей области. Используйте XML-атрибуты, чтобы указать другое XML-имя или пространство имен для элемента.

Не могли бы вы объяснить, почему webService не принимает WebControl и как решить эту проблему?


person Programer    schedule 19.09.2012    source источник
comment
Зачем тебе такая вещь? Кнопка принадлежит своей странице и не должна сериализоваться.   -  person Amiram Korach    schedule 19.09.2012
comment
Чего вы пытаетесь достичь с помощью этого метода? Я вижу, что это называется SetCaption(), но я не понимаю, почему вы отправляете элемент управления кнопкой?   -  person christiandev    schedule 19.09.2012
comment
более полная функция получает System.Web.UI.ControlCollection, где я устанавливаю все заголовки/тексты и т. д. из моей базы данных для каждого элемента управления. Это передается через страницу aspx (this.Page.Controls). Я упростил его для вопросов. Таким образом, я могу легко изменить язык. Но почему это важно?   -  person Programer    schedule 19.09.2012


Ответы (1)


Веб-служба не принимает WebControl, поскольку он не сериализуем, а хороший дизайн веб-службы не позволяет напрямую управлять представлениями или пользовательскими интерфейсами. Логика для ваших представлений должна оставаться в ваших представлениях, а не в том, что обычно является бизнес-уровнем. Типичный способ обработки языковой поддержки в представлении или на веб-странице — сделать запрос к веб-службе, указывающий язык, который должна поддерживать страница, и вернуть список меток в виде пар ключ/значение. Ключ — это идентификатор элемента управления, а значение — это то, что должно отображаться в элементе управления. Это необходимо только в том случае, если ваша веб-страница использует много Ajax. Если вы просто визуализируете страницу на сервере, вы можете заполнить элементы управления правильным языком, когда они отображаются на сервере. Вот статья MSDN, в которой обсуждается как это сделать.

person Kevin Junghans    schedule 19.09.2012
comment
Я вижу, что ты говоришь. Если я выберу такой метод, могу ли я вернуть словарь с парами ключ-значение, которые будут представлять мой идентификатор/значение? Поскольку это также сеиализовано, поэтому проблема не решена,... - person Programer; 19.09.2012
comment
@Programmer - Вы сказали: «Поскольку это также сериализовано, проблема не решена ... Почему проблема не решена? Словарь можно сериализовать, а элементы управления — нет. Вы можете вернуть словарь в веб-службе во многих форматах. И еще один важный момент, который я отметил, заключается в том, что вам даже не нужно вызывать веб-службу, если вы обрабатываете свои страницы на сервере. Вы рендерите страницы на сервере? - person Kevin Junghans; 19.09.2012
comment
Он говорит, что я не могу вернуть словарь, так как он ИДИКТИОННЫЙ. Я отображаю их, но весь текст из базы данных, и я хочу, чтобы мой веб-сервис поддерживал многие из моих сайтов. Вся логика БД находится в WebService - person Programer; 19.09.2012
comment
System.InvalidOperationException: не может быть отражено. System.NotSupportedException: тип System.Collections.Generic.Dictionary не поддерживается, так как он реализует IDictionary. - person Programer; 19.09.2012
comment
Вот блог, в котором показан один из способов сериализации словаря blogs.msdn.com/b/adam/archive/2012/03/06/10060276.aspx. Вот более конкретная информация о локализации и глобализации веб-приложений asp.net msdn.microsoft.com/en-us/library/c6zyy3s9(v=vs.100).aspx. - person Kevin Junghans; 19.09.2012