2016-06-16 11 views
0

Я попытался записать страницу ведения журнала в свой «проект». Я нашел некоторое решение, основанное на состоянии сеанса. Это очень простой проект и прекрасно работает, но когда я реализовал эту вещь в своем коде, она не работает. Он не видит, что значения образуют метод POST, они пусты. Единственное отличие моего проекта в том, что я использовал MasterPage и Placeholders ... Может ли это повлиять на поток данных?POST не работает при использовании Placeholders и Masterpage

Найдено проекта - контроль

<form id="form1" runat="server"> 
    <asp:Panel ID="Panel1" runat="server" BackColor="#FFE0C0" Height="50px" Width="192px"> 
     &nbsp;<asp:Label ID="Label1" runat="server" Text="login"></asp:Label> 
     <asp:TextBox ID="TBlogin" runat="server"></asp:TextBox><br /> 
     <asp:Label ID="Label2" runat="server" Text="hasło"></asp:Label> 
     <asp:TextBox ID="TBhaslo" runat="server" TextMode="Password"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" Text="Zaloguj się!" Width="190px" PostBackUrl="loguj.aspx" /> 
    </asp:Panel> 

    <asp:SqlDataSource ID="SDSUzytkownik" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringSklep %>" SelectCommand="SELECT * FROM [uzytkownik] WHERE (([login] = @Log) AND ([haslo] = @Has))"> 
     <SelectParameters> 
      <asp:FormParameter DefaultValue="&quot;&quot;" FormField="TBlogin" Name="Log" /> 
      <asp:FormParameter DefaultValue="&quot;&quot;" FormField="TBhaslo" Name="Has" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

    <br /> 
    &nbsp; 

    <asp:Label ID="LComment" runat="server" Text="Label" Visible="False"></asp:Label><br /> 
    <br /> 
    <asp:FormView ID="FVUzytkownik" runat="server" CellPadding="4" DataKeyNames="userID" 
     DataSourceID="SDSUzytkownik" ForeColor="#333333" OnDataBound="FVUzytkownik_DataBound"> 

     <ItemTemplate> 
      Hello 
      <asp:Label ID="imieNazwiskoLabel" runat="server" Text='<%# Bind("imieNazwisko") %>'></asp:Label>!<br /> 
      <br /> 
      Your login: 
      <asp:Label ID="loginLabel" runat="server" Text='<%# Bind("login") %>'></asp:Label><br /> 

      Your email: 
      <asp:Label ID="emailLabel" runat="server" Text='<%# Bind("email") %>'></asp:Label><br /> 
     </ItemTemplate> 

    </asp:FormView> 
    <asp:Label ID="LabelTEST" runat="server" Text="LabelTestujący"></asp:Label> 
    &nbsp;&nbsp;<br /> 
    <asp:Label ID="Label3" runat="server" Text="Label" Visible="False"></asp:Label> 
</form> 

код за

protected void FVUzytkownik_DataBound(object sender, EventArgs e) 
{ 
    LabelTEST.Text = "Im in"; 
    if (FVUzytkownik.Row != null) 
    { 
     Session["Logged"] = Request.Form["TBlogin"]; 
     Panel1.Visible = false; 
     LZalogowanyJako.Text = "You are logged as:" + Session["Logged"]; 

     LabelTEST.Text = "<br/>Im logged <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
    else if (Request.Form["TBlogin"] != null && Session["Logged"] == null) 
    { 
     LComment.Text = "Logging failed. Wrong pass."; 
     LComment.Visible = true; 
     LabelTEST.Text = "<br/>Loggin failed <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
    else { 
     LabelTEST.Text = "<br/> All failed <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
} 

Мой код - заполнитель на Masterpage

<div class="content"> 
    <form id="form1" runat="server" action="/acc/Log.aspx" method="post"> 
     <asp:ContentPlaceHolder ID="middle" runat="server"> 
     </asp:ContentPlaceHolder> 
    </form> 
</div> 

Place Holder Content

<asp:Content ID="Content2" ContentPlaceHolderID="middle" runat="server"> 
    <h2>Logowanie</h2> 
     <table style="width: 100%;"> 
      <tr> 
       <td>Login:</td> 
       <td class="auto-style1"> 
        <asp:TextBox ID="loginInput" runat="server" placeholder="ImieNazwisko" Width="155px"></asp:TextBox> 
       </td> 
      </tr> 
      <tr> 
       <td>Pass:</td> 
       <td class="auto-style1"> 
        <asp:TextBox ID="hasloInput" runat="server" placeholder="8 znaków" Width="155px" TextMode="password"></asp:TextBox> 
       </td> 
      </tr> 
      <tr> 
       <td>&nbsp;</td> 
       <td class="auto-style1"> 
        <asp:ImageButton ID="zaloguj" runat="server" Height="40px" ImageUrl="~/images/zaloguj.png" PostBackUrl="/logowanie/Logowanie.aspx" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [uzytkownicy] WHERE (([login] = @login) AND ([haslo] = @haslo))"> 
         <SelectParameters> 
          <asp:FormParameter FormField="loginInput" Name="login" Type="String" /> 
          <asp:FormParameter FormField="hasloInput" Name="haslo" Type="String" /> 
         </SelectParameters> 
        </asp:SqlDataSource> 
        <asp:FormView ID="FVUzytkownik" runat="server" CellPadding="4" DataKeyNames="userID" 
         DataSourceID="SqlDataSource1" ForeColor="#333333" OnDataBound="FVUzytkownik_DataBound" EnableModelValidation="True"> 
         <ItemTemplate> 
          Hello! 
         <br /> 
          Your login: 
           <asp:Label ID="loginLabel" runat="server" Text='<%# Bind("login") %>'></asp:Label><br /> 

          <br /> 
          Your email : 
         <asp:Label ID="emailLabel" runat="server" Text='<%# Bind("email") %>'></asp:Label><br /> 
         </ItemTemplate> 
        </asp:FormView> 
       </td> 
       <td> 
        <asp:Label ID="LabelZalogowanyJako" runat="server" Text="message log "></asp:Label> 
        <br /> 
        <asp:Label ID="LabelTEST" runat="server" Text="LabelTESTowanie"></asp:Label> 
       </td> 
      </tr> 
     </table> 
</asp:Content> 

и тот же код за

protected void FVUzytkownik_DataBound(object sender, EventArgs e) 
{ 
    LabelTEST.Text = "Im in"; 
    if (FVUzytkownik.Row != null) 
    { 
     Session["Logged"] = Request.Form["TBlogin"]; 
     Panel1.Visible = false; 
     LZalogowanyJako.Text = "You are logged as:" + Session["Logged"]; 

     LabelTEST.Text = "<br/>Im logged <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
    else if (Request.Form["TBlogin"] != null && Session["Logged"] == null) 
    { 
     LComment.Text = "Logging failed. Wrong pass."; 
     LComment.Visible = true; 
     LabelTEST.Text = "<br/>Loggin failed <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
    else { 
     LabelTEST.Text = "<br/> All failed <br/><br/> databse ROW = " + FVUzytkownik.Row + "<br/><br/> Session = " + Session["Logged"] + " <br/><br/> Request Form Login = " + Request.Form["TBlogin"]; 
    } 
} 

и экран эффекта:

s

ответ

0

Это не очень понятно, хотя из кода вы вывесили я вижу, вы пытаетесь используйте несколько тегов form. Ну, хотя это возможно, ASP.NET WebForms не был разработан именно так. Если вы настаиваете на использовании нескольких форм, то только один из них ДОЛЖЕН иметь атрибут runat="server". Но вам лучше перейти на другой подход, например, asp:UpdatePanel, если вам нужна такая функциональность.

+0

Я использовал «форму» один раз, на главной странице и в ней хранитель. Второй способ - удалить его с главной страницы и помещать в Placeholder, но ничего не изменилось в функциональности, но все равно не работает. – TimA

+0

Да, я говорю о HTML-рендеринге. Он содержит две формы, так как вы использовали тег как на главной странице, так и в держателе места - это не хорошая практика в WebForms. И НЕ удаляйте тег формы с главной страницы; для правильной работы ASP.NET WebForms требуется. –

+0

Хм. Хорошо, поэтому я удалил «форму» с места владельца ... Вы предложили использовать 'asp: UpdatePanel', но какие части должны быть внутри? Что касается части «за кодом», она все еще ждет значений от POST. На самом деле, я понятия не имею, как это сделать. – TimA