UpdatePanel в UserControl (проблема с вложенными формами) - PullRequest
0 голосов
/ 24 декабря 2009

У меня проблема с моим UserControl. Он имеет внутри UpdatePanel, но он должен быть помещен внутри тега, чтобы работать (в противном случае PostBack не асинхронный)

Проблема в том, что, если я добавлю этот UserControl, например, в. Default.aspx страница, появляется ошибка «На странице может быть только один тег формы на стороне сервера»

как с этим справиться?

[править]

код UserControl.ascx:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PodmiotyZwolnioneCtrl.ascx.cs" Inherits="FormularzPodatkowy.PodmiotyZwolnioneCtrl" %>
 <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>

<link href="AjaxStyle.css" rel="stylesheet" type="text/css" />

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<body>
<form id="form1" runat="server">
<div>
        <asp:UpdatePanel ID="UpdatePanel1" 
                         UpdateMode="Conditional"
                         runat="server">
            <ContentTemplate>
               <fieldset>
               <legend>UpdatePanel content</legend>
                <!-- Other content in the panel. -->
                <%=DateTime.Now.ToString() %>
                <br />
                <asp:Button ID="Button1" 
                            Text="Refresh Panel" 
                            runat="server" />
                </fieldset>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</form>
</body>
</html>

код WebForm1.aspx:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="FormularzPodatkowy.WebForm1" %>

 <%@ Register src="PodmiotyZwolnioneCtrl.ascx" tagname="PodmiotyZwolnioneCtrl" tagprefix="uc1" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <uc1:PodmiotyZwolnioneCtrl ID="PodmiotyZwolnioneCtrl1" runat="server" />
</form>
 </body>
</html>

Ответы [ 2 ]

4 голосов
/ 24 декабря 2009

Ваш код должен быть:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PodmiotyZwolnioneCtrl.ascx.cs" Inherits="FormularzPodatkowy.PodmiotyZwolnioneCtrl" %>
 <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>

<link href="AjaxStyle.css" rel="stylesheet" type="text/css" />

<div>
        <asp:UpdatePanel ID="UpdatePanel1" 
                         UpdateMode="Conditional"
                         runat="server">
            <ContentTemplate>
               <fieldset>
               <legend>UpdatePanel content</legend>
                <!-- Other content in the panel. -->
                <%=DateTime.Now.ToString() %>
                <br />
                <asp:Button ID="Button1" 
                            Text="Refresh Panel" 
                            runat="server" />
                </fieldset>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>

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

Также, если ваши постбэки не асинхронны, посмотрите на ваш web.config для:

    <xhtmlConformance mode="Legacy"/>

и измените его на:

    <xhtmlConformance mode="Transitional"/>

Я потратил три дня на работу, чтобы найти решение для UpdatePanel, которое всегда отправлялось обратно на сервер.

1 голос
/ 24 декабря 2009

Вы должны проверить и пользовательский контроль, и страницу и убедиться, что у вас есть только один тег <form id='form1' runat='server'> в вашей разметке. Наличие более одного даст вам ошибку, с которой вы столкнулись.

Удачи, и надеюсь, что это поможет некоторым.

...