Рендеринг проблем UserControl с помощью Сервера. Выполнитесь () в веб-сервисе ASMX

Это исключение выдается, когда вы пытаетесь использовать метод WebElement, которого больше нет на странице. Если ваша сетка загружает данные динамически, и вы обновляете сетку, любые ссылки на элементы этой сетки будут «устаревшими». Дважды проверьте, что элемент, на который вы пытаетесь сослаться, находится на странице в ваших тестах, и вам может понадобиться создать экземпляр объекта.

15
задан John Saunders 3 August 2009 в 21:22
поделиться

5 ответов

Похоже, ответ был похоронен в комментариях к ViewManager

. Вам понадобится класс, который наследуется от Page и отменяет проверку серверных элементов управления не в форме

public class FormlessPage : Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {
    }
}

Затем, когда вы визуализируете элемент управления, используйте

Page page = new FormlessPage();
UserControl ctl = (UserControl)page.LoadControl(controlName);
//etc

, я предполагаю, что вы потеряете возможность запускать события из любых элементов управления, визуализированных таким образом.

21
ответ дан 1 December 2019 в 03:15
поделиться

Вы можете изменить свой метод GetControl () следующим образом:

private string GetControl(String controlName, String ClassId)
{
    Page page = new Page();
    StringWriter writer = new StringWriter();
    page.Server.Execute(controlName, writer, false);
    return writer.ToString();
}
0
ответ дан 1 December 2019 в 03:15
поделиться

Вместо использования скрытого элемента управления asp.net в пользовательском элементе управления просто используйте обычный скрытый ввод HTML с тегами кода <%%>, чтобы заполнить данные следующим образом:

<input id="Hidden1"  type="hidden" value="<%= text %>"/>

"text" - это общедоступная переменная в коде, стоящем за файлом.

Это сработало для меня и не требовало формы с runat = "server" .

1
ответ дан 1 December 2019 в 03:15
поделиться
<System.Web.Services.WebMethod()> _
Public Shared Function GetDetails(ByVal filename As String) As String
    Dim page As Page = New Page()
    Dim ctl As recDetails = CType(page.LoadControl("~/Controles/recDetails.ascx"), recDetails)
    ctl.FileName = filename

    page.EnableEventValidation = False
    Dim _form As New HtmlForm()
    page.Controls.Add(_form)
    _form.Controls.Add(ctl)

    Dim writer As New System.IO.StringWriter()
    HttpContext.Current.Server.Execute(page, writer, False)
    Dim output As String = writer.ToString()
    writer.Close()
    Return output
End Function

Вы добавляете форму динамически

1
ответ дан 1 December 2019 в 03:15
поделиться

setw () влияет только на следующую вставку. Именно так ведет себя setw () . Поведение setw () такое же, как ios_base :: width () . Я получил информацию о setw () с cplusplus.com .

Вы можете найти полный список манипуляторов здесь . По этой ссылке все флаги потока должны быть установлены, пока не будут изменены другим манипулятором. Одно замечание о левом , правом и внутреннем манипуляторах: они похожи на другие флаги, и действительно сохраняются, пока не будут изменены. Однако они действуют только в том случае, если задана ширина потока, а ширина должна задаваться для каждой строки. Так, например,

cout.width(6);
cout << right << "a" << endl;
cout.width(6);
cout << "b" << endl;
cout.width(6);
cout << "c" << endl;

даст вам

>     a
>     b
>     c

, а

cout.width(6);
cout << right << "a" << endl;
cout << "b" << endl;
cout << "c" << endl;

даст вам

>     a
>b
>c

Манипуляторы ввода и вывода не являются липкими и появляются только один раз там, где они используются. Все параметризованные манипуляторы отличаются друг от друга, вот краткое описание каждого:

setiosflags позволяет вам вручную устанавливать флаги, список которых можно найти здесь , так что он липкий.

Resetiosflags ведет себя аналогично setiosflags , за исключением того, что он сбрасывает указанные флаги.

setbase устанавливает базу целых чисел, вставленных в поток (таким образом, 17 в базе 16 будет «11», а в базе 2 будет «10001»).

setfill устанавливает символ заполнения для вставки в поток, когда используется setw .

setprecision устанавливает десятичную точность, которая будет использоваться при вставке значений с плавающей запятой.

0
ответ дан 1 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: