Измените вывод HTML в стороне сервера в ASP.NET

Это старый вопрос, но я добавлю альтернативный ответ.

Существует два магических метода

__call($name, $arguments)
запускается при вызове недоступных методов в контексте объекта.

__callStatic($name, $arguments)
срабатывает при вызове недоступных методов в статическом контексте.

<?php
class MethodTest
{
    public function __call($name, $arguments)
    {
        // Note: value of $name is case sensitive.
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
    }

    /**  As of PHP 5.3.0  */
    public static function __callStatic($name, $arguments)
    {
        // Note: value of $name is case sensitive.
        echo "Calling static method '$name' "
             . implode(', ', $arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('in object context');

MethodTest::runTest('in static context');  // As of PHP 5.3.0

Выходы

Вызов метода объекта 'runTest' в контексте объекта
Вызов статического метода 'runTest' в статическом контексте

7
задан Roma 19 May 2009 в 20:53
поделиться

2 ответа

Если флажки не работают на сервере или инкапсулированы внутри элемента управления, мы можем использовать следующий метод:

protected override void Render(HtmlTextWriter writer)
{
    // setup a TextWriter to capture the markup
    TextWriter tw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(tw);

    // render the markup into our surrogate TextWriter
    base.Render(htw);

    // get the captured markup as a string
    string pageSource = tw.ToString();

    string enabledUnchecked = "<input type=\"checkbox\" />";
    string disabledChecked = "<input type=\"checkbox\" disabled checked />";

    // TODO: need replacing ONLY inside a div with id="uwg"
    string updatedPageSource = pageSource;
    if (chk_CheckAll.Checked)
    {
         updatedPageSource = Regex.Replace(pageSource, enabledUnchecked,
                disabledChecked, RegexOptions.IgnoreCase);
    }

    // render the markup into the output stream verbatim
    writer.Write(updatedPageSource);
}

Решение взято из здесь .

21
ответ дан 6 December 2019 в 06:50
поделиться

Наследуйте его, найдите элементы управления в дереве элементов управления и установите соответствующие атрибуты.

 protected override void OnPreRender(EventArgs e)
 {
      base.OnPreRender(e);
      (this.Controls[6] as CheckBox).Disabled = true;
 }

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

5
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

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