Avatar billede ylwen Nybegynder
01. juni 2008 - 18:08 Der er 9 kommentarer og
1 løsning

Underlig fejl textbox readonly

Jeg er stødt på en underlig fejl!
Jeg har en formular som ser ud som følger:

    <form id="frmEditUser" runat="server">
    <div>
    <table>
        <tr>
            <td><asp:Label ID="lblUserName" runat="server" Text="Bruger navn"></asp:Label></td>
            <td><asp:TextBox ID= "txtUserName" runat="server"></asp:TextBox></td>
        </tr>
        <tr>
            <td><asp:Label ID="lblFirstName" runat="server" Text="Fornavn"></asp:Label></td>
            <td><asp:TextBox ID= "txtFirstName" runat="server"></asp:TextBox></td>
        </tr>
        <tr>
            <td><asp:Label ID="lblLastName" runat="server" Text="Efternavn"></asp:Label></td>
            <td> <asp:TextBox ID= "txtLastName" runat="server"></asp:TextBox></td>
        </tr>
        <tr>
            <td><asp:Label ID="lblAddress" runat="server" Text="Adresse"></asp:Label></td>
            <td><asp:TextBox ID= "txtAddress" runat="server"></asp:TextBox></td>
        </tr>
      <tr>
            <td><asp:Button ID="btnSubmit" runat="server" Text="Gem" /></td>
        </tr> 
    </table>

    </div>
    </form>

Ved klik på Gem knappen bliver følgende kode kørt i codebehind filen:

    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        Dim sqlConn As SqlConnection
        Dim sqlCmd As SqlCommand

        sqlConn = New SqlConnection(strConnection)
        sqlCmd = New SqlCommand("UPDATE UserInfo SET FirstName = '" & txtFirstName.Text & "', LastName = '" & txtLastName.Text & "' WHERE UserName = '" & txtUserName.text & "'", sqlConn)
        sqlConn.Open()
        sqlCmd.ExecuteReader()
     
    End Sub

Det virker fint, men nu vil jeg ikke have at brugerne kan ændre deres brugernavn og jeg sætter derfor ReadOnly="true" på txtUserName og så har jeg problemet. Der bliver skrevet tekst på formularen, men det bliver ikke overført til btnSubmit, txtUserName.text er tom?
Jeg har også prøvet at sætte visible til false, men det giver samme resultat.

Nogen der har oplevet dette og ved hvad man kan gøre ved det?
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 18:27 #1
Ja, det bliver jo nok bare ikke overført. Men du kender jo allerede navnet - det står i din database, eller kunne gemmes i en sessions-variabel/viewstate. Hvis det ikke kan ændres, behøver det jo strengt taget ikke komme med tilbage.
Avatar billede ylwen Nybegynder
01. juni 2008 - 19:47 #2
Jo det skal bruges til Select Where Username, så det er rimelig væsentligt at det kommer med. Jeg er heller ikke så meget ude på at finde andre løsninger, da jeg mener den kode jeg har skrevet burde virke.
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 20:09 #3
Nej, det bør den ikke. For det første vil du aldrig kunne forhindre en bruger i at ændre felter i en form, readonly eller hidden - det sker trods alt på brugerens maskine, og for det andet, så kan du jo se at browserne ikke gør som du vil ;)

Gem blot det brugernavn i en sessions-variabel - insholdet af sådan een kan man også bruge i en SELECT.
Avatar billede ylwen Nybegynder
01. juni 2008 - 20:32 #4
Jeg er godt klar over at man kan gemme data i en session og det virker også fint. Jeg efterlyser bare en forklaring på hvorfor man ikke kan trække data ud fra en tekstboks som er readonly? Det kan man i asp og alle andre sprog jeg kender.
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 21:44 #5
Prøv at kigge på den HTML, der genereres af .NET.
Avatar billede ylwen Nybegynder
01. juni 2008 - 22:20 #6
<!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><title>
    Min Profil
</title></head>
<body>
<form name="frmEditUser" method="post" action="Profile.aspx" id="frmEditUser">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5NTc2NTE0MjZkZGQGTMRjAbzuFrE+U/0/A+69+7Ph" />
</div>

    <div>
    <table>
        <tr>
            <td><span id="lblUserName">Bruger navn</span></td>
            <td><input name="txtUserName" type="text" value="mitbrugernavn" id="txtUserName" /></td>
        </tr>
        <tr>
            <td><span id="lblFirstName">Fornavn</span></td>
            <td><input name="txtFirstName" type="text" value="mitfornavn" id="txtFirstName" /></td>
        </tr>
        <tr>
            <td><span id="lblLastName">Efternavn</span></td>
            <td> <input name="txtLastName" type="text" value="mitefternavn" id="txtLastName" /></td>
        </tr>
        <tr>
            <td><span id="lblAddress">Adresse</span></td>
            <td><input name="txtAddress" type="text" value="minvej 2" id="txtAddress" /></td>
        </tr>
      <tr>
            <td><input type="submit" name="btnSubmit" value="Gem" id="btnSubmit" /></td>
        </tr> 
    </table>

    </div>
   
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgKw5qqJBAKl1bKzCQK5h62pDwKdlcWpAgLv7ITZAgLCi9reA8Wqk+30TyjffQauQ844vE3+dYmh" />
</div></form>

</body>
</html>
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 22:37 #7
Feltet "txtUserName"? Der er ikke noget, der tyder på at den ikke kan rettes i.
Avatar billede ylwen Nybegynder
01. juni 2008 - 23:01 #8
Nej det kan jeg se, jeg fik lagt html koden til den uden readonly. Her er den rigtige:

<!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><title>
    Min Profil
</title></head>
<body>
<form name="frmEditUser" method="post" action="Profile.aspx" id="frmEditUser">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5NTc2NTE0MjZkZGQGTMRjAbzuFrE+U/0/A+69+7Ph" />
</div>

    <div>
    <table>
        <tr>
            <td><span id="lblUserName">Bruger navn</span></td>
            <td><input name="txtUserName" type="text" value="mitbrugernavn" readonly="readonly" id="txtUserName" /></td>
        </tr>
        <tr>
            <td><span id="lblFirstName">Fornavn</span></td>
            <td><input name="txtFirstName" type="text" value="mitfornavn" id="txtFirstName" /></td>
        </tr>
        <tr>
            <td><span id="lblLastName">Efternavn</span></td>
            <td> <input name="txtLastName" type="text" value="mitefternavn" id="txtLastName" /></td>
        </tr>
        <tr>
            <td><span id="lblAddress">Adresse</span></td>
            <td><input name="txtAddress" type="text" value="minadresse" id="txtAddress" /></td>
        </tr>
      <tr>
            <td><input type="submit" name="btnSubmit" value="Gem" id="btnSubmit" /></td>
        </tr> 
    </table>

    </div>
   
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgKw5qqJBAKl1bKzCQK5h62pDwKdlcWpAgLv7ITZAgLCi9reA8Wqk+30TyjffQauQ844vE3+dYmh" />
</div></form>

</body>
</html>
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 23:13 #9
Ja, det bliver til et <input>-felt med attributten "readonly". Som jeg sagde før, så forhindrer det ikke på nogen måde, at klienten/browseren retter i feltets indhold. Det er så nemt for er "hacker", som at spise en vingummibamse.

Men du har fortalt ASP.NET at feltet er "readonly", og ASP.NET overholder dette ved ikke at give dig værdien tilbage automatisk - for den kunne jo netop blive ændret. Og da du kender værdien i forvejen, er der heller ingen grund til dette (det er da et slags argument)

Den er der nu nok via Request.Form("txtUserName") - jeg har ikke lige prøvet.
Avatar billede ylwen Nybegynder
03. juli 2008 - 20:05 #10
Nå der kom aldrig rigtig noget svar på dette spørgsmål, som jeg ikke vidste i forvejen. Jeg søgte en forklaring på problemet og en metode til at sørge for at selv de skjulte felter kom med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester