RenderControl UserControl просит тег form в (C#.NET)

Используйте тот же код, но удалите месяц. Пример:

function fetchTime() {
  var today = new Date();
  today.setMonth(today.getMonth() - 1);
  var dd = today.getDate();
  var mm = today.getMonth() + 1;
  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }
  var today = yyyy + '-' + mm + '-' + dd;
  return (today);
}
12
задан Bhargav Rao 24 February 2019 в 07:49
поделиться

4 ответа

Кроме того, Вы могли отключить ServerForm/Event-validation на странице, которая представляет управление к строке.

Следующий пример иллюстрирует, как сделать это.

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string rawHtml = RenderUserControlToString();
    }

    private string RenderUserControlToString()
    {
        UserControl myControl = (UserControl)LoadControl("WebUserControl1.ascx");

        using (TextWriter myTextWriter = new StringWriter())
        using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter))
        {
            myControl.RenderControl(myWriter);

            return myTextWriter.ToString();
        }
    }

    public override void VerifyRenderingInServerForm(Control control)
    { /* Do nothing */ }

    public override bool EnableEventValidation
    {
        get { return false; }
        set { /* Do nothing */}
    }
}
16
ответ дан 2 December 2019 в 19:56
поделиться

Можно или добавить форму к пользовательскому элементу управления или использовать регулярное поле ввода HTML

 <input type="text" />

Править: При попытке сделать что-то AJAXy, возможно, Вы хотите что-то вроде этого http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

    public static string RenderView<D>(string path, D dataToBind)
    {
        Page pageHolder = new Page();
        UserControl viewControl = (UserControl) pageHolder.LoadControl(path);
        if(viewControl is IRenderable<D>)
        {
            if (dataToBind != null)
            {
                ((IRenderable<D>) viewControl).PopulateData(dataToBind);
            }
        }
        pageHolder.Controls.Add(viewControl);
        StringWriter output = new StringWriter();
        HttpContext.Current.Server.Execute(pageHolder, output, false);

        return output.ToString();
    }

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

0
ответ дан 2 December 2019 в 19:56
поделиться

Можно добавить управление в страницу, HTML рендеринга и затем удалить управление из страницы.

Или попробуйте это:

Page tmpPage = new TempPage(); // temporary page
Control tmpCtl = tmpPage.LoadControl( "~/UDynamicLogin.ascx" );
//the Form is null that's throws an exception
tmpPage.Form.Controls.Add( tmpCtl );

StringBuilder html = new StringBuilder();
using ( System.IO.StringWriter swr = new System.IO.StringWriter( html ) ) {
    using ( HtmlTextWriter writer = new HtmlTextWriter( swr ) ) {
        tmpPage.RenderControl( writer );
    }
}
1
ответ дан 2 December 2019 в 19:56
поделиться

Это - грязное решение, которое я использовал в настоящий момент (доберитесь, оно работающий затем разбирается в нем, правильно?).

Я уже создал новый класс, который наследовал класс UserControl и из которого весь другой "UserControls" я создал, были получены. Я назвал это formPartial (намек на направляющие), и это входит в общедоступную строку renderMyHTML () метод:

TextWriter myTextWriter = new StringWriter();
HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter);

UserControl myDuplicate = new UserControl();
TextBox blankTextBox;

foreach (Control tmpControl in this.Controls)
{
    switch (tmpControl.GetType().ToString())
    {
        case "System.Web.UI.LiteralControl":
            blankLiteral = new LiteralControl();
            blankLiteral.Text = ((LiteralControl)tmpControl).Text;
            myDuplicate.Controls.Add(blankLiteral);
            break;
        case "System.Web.UI.WebControls.TextBox":
            blankTextBox = new TextBox();
            blankTextBox.ID = ((TextBox)tmpControl).ID;
            blankTextBox.Text = ((TextBox)tmpControl).Text;
            myDuplicate.Controls.Add(blankTextBox);
            break;

            // ...other types of controls (ddls, checkboxes, etc.)

    }
}

myDuplicate.RenderControl(myWriter);
return myTextWriter.ToString();

Недостатки первое, что пришло на ум:

  1. Вам нужен оператор выбора с каждым возможным управлением (или средства управления, которые Вы ожидаете).
  2. Необходимо передать все важные атрибуты от существующего управления (текстовое поле, и т.д.) к новому пустому управлению.
  3. Не в полной мере пользуется методом RenderControl Средств управления.

Было бы легко испортить 1 или 2. Хотелось бы надеяться, хотя, это помогает кому-то еще предложить более изящное решение.

1
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

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