2009-03-03 9 views
1

Hier ist ein vereinfachtes Beispiel dessen, was ich erreichen möchte;Setzen eines Kontrollkästchens mit <% # isChecked%> Ausdruck

<asp:CheckBox runat="server" Checked="<%# this.isChecked %>" id="myCheckBox" /> 

Dann in meinem Code hinter;

public partial class _Default : System.Web.UI.Page 
{ 
    bool _isChecked = true; 

    public string isChecked 
    { 
     get 
     { 
      return _isChecked.ToString(); 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

Ich bin mir bewusst, dass in diesem Fall kann ich einfach verwenden myCheckBox.Checked = true, aber ich bin nur mit diesem Beispiel zur Illustration. Die echte Kontrolle ist eine benutzerdefinierte, aber ich habe kein Glück, diesen Ansatz zu funktionieren. Es scheint nur den Wert zu ignorieren, den ich anbiete.

Ist es zulässig, <% # this.isChecked%> auf diese Weise zu verwenden?

EDIT:

Sorry, ich schrieb dies in Eile und erkennen, dass es nicht wirklich klar ist, dass ich „Checkbox“ soll nur ein Beispiel sein. Ich versuche nur, ein serverseitiges Bool in ein bestimmtes Attribut des ASP-Steuerelements zu bekommen, nicht unbedingt das "checked" -Attribut des Checkbox-Steuerelements.

EDIT 2: Aktualisiert meinem Beispiel String-Eigenschaft zu verwenden, anstatt boolean Feld, aber es meldet den folgenden Fehler in meiner ASPX-Datei jetzt;

Kann nicht Typ 'string' auf 'Bool'

Antwort

3

Wenn Sie liefern

checked="anything" 

konvertieren wird es (in HTML) überprüft werden. Sie müssen das überprüfte Attribut weglassen, damit es nicht überprüft wird. Dies funktioniert nicht.


Nach der Bearbeitung auf die Frage, hier ist meine Antwort aktualisiert:

ich nicht versuchen würde, das Attribut in der Aspx-Seite zu setzen, lieber würde ich die ID und tut es im Code verwenden.

z.

<asp:Control ID="uxMyControl" runat="server" attributes="other"... /> 

-Code hinter:

private Boolean mypropery = false; 

Page_Load(object sender, EventArgs e) 
{ 
    this.myproperty = true; 
    uxMyControl.attributes = myproperty; 
} 
+0

Dies ist, was ich anfangs getan hatte, aber weil das Steuerelement Rendern bevor Page_Load für die übergeordnete Seite ausgeführt wird, wird das Attribut zu spät festgelegt, und das Steuerelement wird entsprechend dem Standardwert des Attributs statt der eine Einstellung in Page_Load. –

+0

Das Steuerelement sollte zu diesem Zeitpunkt noch nicht vollständig gerendert werden. Haben Sie jedoch versucht, die Page_load des Steuerelements zu bearbeiten? Oder mit Page_PreInit? – cjk

+0

'Checked' ist in diesem Fall eine boolesche Eigenschaft auf einem Server-Steuerelement, kein HTML-Attribut. Das Rendering wird von der Serversteuerung übernommen. –

2

Nein, weil Sie eine Bool anstatt die Zeichenfolge (typecasting Problem) Rückkehr, müssen Sie eine Eigenschaft, anstatt ein Feld mit dem Datenbindung Ausdruck arbeiten, und einige Browser werden Ihre Checkbox nicht richtig mit den Worten "true/false" rendern. Stattdessen erwarten sie, checked="checked" zu sehen, um die Box oder nichts zu überprüfen, um es zu überprüfen.

Basierend auf Ihrer Bearbeitung, vermute ich, dass Sie Code an anderer Stelle haben, die versucht, den isChecked boolean zu setzen. Der Code schlägt fehl, da der isChecked-Name stattdessen auf eine Zeichenfolgeneigenschaft verweist. Aktualisieren Sie es, um _isChecked zu setzen.

+0

Ich habe von einem Bool-Feld in eine Zeichenfolge-Eigenschaft geändert, aber jetzt bekomme ich "Kann nicht Typ 'String' in 'Bool' konvertieren" in meiner .aspx-Datei. Irgendeine Idee, warum es die Schnur nicht annimmt? –

+0

Mehrere Ideen, aber die einfachste Art zu wissen, welche richtig ist, ist, wenn Sie Ihre Frage bearbeiten, um den neuen Code anzuzeigen. –

+0

Ursprüngliche Frage aktualisiert mit überarbeiteten Code –

Verwandte Themen