Создание Системы. Сеть. UI.Page программно в IHTTPHandler

need to destructuring declaration and to access global scope use var instead of let.

public getNeighbours(coords: Coords): Coords[];
public getNeighbours(x: number, y: number): Coords[];

public getNeighbours(a: number | Coords, b?: number): Coords[] {
// let x: number;
// let y: number;
if (typeof a === 'object') {
   var {x, y} = a as Coords; // A destructuring declaration must have an initializer
   x = x;
   y = y;
   console.log('inside destructuring: ', x, y);
 } else {
    x = a;
    y = b as number;
 }
 console.log('outside destructuring: ', x,y);
 const result = [{ x: x - 1, y }, { x: x + 1, y }, { x, y: y - 1 }, { x, y: y + 1 }];
 return result;
}

проверьте здесь Пример StackBlitz

можно избежать var и объявить объект глобально.

public getNeighbours(coords: Coords): Coords[];
public getNeighbours(x: number, y: number): Coords[];

public getNeighbours(a: number | Coords, b?: number): Coords[] {
 // let x: number;
 // let y: number;
 let globalStorage: any = {};
 if (typeof a === 'object') {
   let {x, y} = a as Coords; // A destructuring declaration must have an initializer
   globalStorage.x = x;
   globalStorage.y = y;
   console.log('inside destructuring: ', x, y);
  } else {
    globalStorage.x = a;
    globalStorage.y = b as number;
  }
 console.log('outside destructuring: ', globalStorage);
 const result = [{ x: globalStorage.x - 1, y:globalStorage.y }, { x: globalStorage.x + 1, y:globalStorage.y }, { x: globalStorage.x, y: globalStorage.y - 1 }, { x: globalStorage.x, y: globalStorage.y + 1 }];
 return result;
}
6
задан E. Earl 22 March 2019 в 08:04
поделиться

3 ответа

Вместо того, чтобы пытаться записать непосредственно в ответ, Вы могли бы хотеть просто добавить средства управления к странице. Так как страница совершенно нова и не имеет никакой разметки, Вам, вероятно, придется добавить все элементы HTML для создания ее легальным HTML для представления ее правильно. Никогда попробовав это, я понятия не имею, будет ли это работать.

 Page myPage = new Page();
 page.Controls.Add( new LiteralControl( "hello " + pageName ) );
 return myPage;

Мне не ясно, что это будет иметь необходимый HTML, ГОЛОВУ и Теги основного текста. Могло бы быть лучше создать базовую страницу, которая имеет скелетную разметку, к которой можно просто добавить средства управления и использовать BuildManager в качестве в примере, чтобы инстанцировать этой страницы, затем добавить средства управления.

1
ответ дан 10 December 2019 в 00:45
поделиться

Вы не можете писать в ответ от IRouteHandler - это слишком рано во время жизненного цикла запроса. Вы должны писать только в ответ из IHttpHandler , что и является страницей .

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

Вот как вы можете загрузить существующую страницу:

Page p = (Page)BuildManager.CreateInstanceFromVirtualPath("~/MyPage.aspx");

Или вы можете создать ее с нуля:

Page p = new Page();
p.Controls.Add(new LiteralControl(
    @"<html>
      <body>
          <div>
              This is HTML!
          </div>
      </body>
      </html>"));
8
ответ дан 10 December 2019 в 00:45
поделиться

Поместите запросContext перед ответом. Написать, так что requestcontext.response.write

1
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

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