it-swarm.com.de

Wie behält man den Text einer schreibgeschützten TextBox nach PostBack ()

Ich habe ein ASP.NET TextBox und ich möchte, dass es ReadOnly ist. (Der Benutzer ändert es mit einem anderen Steuerelement.)

Wenn es jedoch eine PostBack() gibt, wird der Text auf eine leere Zeichenfolge zurückgesetzt.

Ich verstehe, dass, wenn Sie die ReadOnly-Eigenschaft auf True einer TextBox setzen, ihr Inhalt nicht durch PostBack() gespeichert wird.

Gibt es eine Möglichkeit, den Inhalt nach PostBack() zu behalten und die TextBox für den Benutzer nicht bearbeitbar zu machen? 

Ich habe versucht, die Enabled-Eigenschaft auf False zu setzen. Der Inhalt wird jedoch nach PostBack() nicht gespeichert.

27
Youssef

Eine andere Lösung fand ich und eine einfachere:

Fügen Sie dies der Seitenlademethode hinzu:

protected void Page_Load(object sender, EventArgs e)
{
     TextBox1.Attributes.Add("readonly", "readonly");
}
55
Youssef

Lassen Sie das andere Steuerelement den Wert in einem ausgeblendeten Feld speichern, und ziehen Sie den Wert im Postback aus dem ausgeblendeten Feld und drücken Sie ihn in das Textfeld auf der Serverseite.

6
The Evil Greebo

txtStartDate.Attributes.Add("readonly", "readonly"); beim Laden der Seite in die besten der besten Lösungen, stattdessen Javascripts, versteckte Variablen, Cache, Cookies, Sitzungen und Caches.

2
Jay

Rufen Sie den Wert mit Request.Form[txtDate.UniqueID] ab. Du wirst es bekommen !!

1
Nitin

Ich hatte das gleiche Problem, habe aber Knockout-Bindung 'enable' und ASP.Net Server Control Text verwendet.

Diesen Weg:

<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="value: city, enable: !hasZipCode()"></asp:TextBox>

Beim Senden des Formulars war dieser Feldwert jedoch immer leer. Dies ist vermutlich der Fall, denn wenn das Steuerelement deaktiviert ist, bleibt es nicht in der ViewState-Kette bestehen.

Ich habe das Ersetzen von bindig 'enable' durch 'attr {readonly: hasZipCode}' gelöst.

    <asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>
0
Rodrigo

Hier ist eine Möglichkeit, dies mit Javascript im onfocus -Ereignis der Textbox selbst zu tun. 

Wenn Sie dies mit Javascript tun, hat dies den Vorteil, dass Sie es nicht im Code hinterher machen müssen, was schwierig sein kann, wenn Sie es in Rasteransichten oder ähnlichem tun müssen.

Dieser Javascript-Code wird nur mit Internet Explorer getestet. Bestimmte Teile davon funktionieren nur für den Internet Explorer, z. B. der createTextRange-Teil, der nur dazu dient, das Einfügemarke an den Anfang des Textes in der Textbox zu legen, aber dieser Teil kann übersprungen werden, wenn nicht benötigt. 

Wenn der Kern dieser Technik bei anderen Browsern funktioniert, sollte es möglich sein, den Code über Browser zu ziehen. Der Kern der Idee hier ist die Unschärfe nach dem Einrichten der Anzeige und dann ein Timeout, um den Fokus erneut einzustellen. 

Wenn Sie nur Readonly setzen, wird es erst beim nächsten Mal, wenn Sie dem Textfeld den Fokus geben, Readonly.

Natürlich kann der Code auch in eine Funktion eingefügt werden, die mit "this" als Argument aufgerufen wird.

  <asp:TextBox 
    ID="txtSomething" 
    runat="server"
    Text='<%# Bind("someData") %>'
    onfocus="
var rng = this.createTextRange();
rng.collapse();
rng.select();
if (this.allowFocusevent=='0') {return;};
this.allowFocusevent='0';
this.readOnly=true;
this.blur();
var that=this;
setTimeout(function(){that.focus()},0);
"
  />
0
Magnus