Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[ASP.net] TextMode van een textbox dynamisch instellen

Pagina: 1
Acties:

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
Ik ben bezig met een heel simpel CMS systeempje voor een klant waar hij diverse stukjes tekst van de website kan bewerken. Dit kunnen paginatitels zijn, of kleine tekstblokken op de site. Voor ieder stuk tekst in de database laat ik een TextBox control in een repeater zien, die de tekst weergeeft.
Ik wil slechts één repeater gebruiken voor zowel elementen met 1 regel (titels) als multiline elementen (tekstblokken), dus ik wil de TextMode-property van de TextBox dynamisch instellen. Dit doe ik nu zo:
code:
1
<asp:TextBox ID="txtWaarde" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "value") %>' TextMode='<%# DataBinder.Eval(Container.DataItem, "textmode") %>'></asp:TextBox>


Dit wil dus niet, ik zet een string uit de database in TextMode, maar deze verwacht een waarde uit de TextBoxMode enum. Ik krijg hierdoor een InvalidCastException. Hoe kan ik dit laten werken, het liefst zonder C# code te gebruiken?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21:24

gorgi_19

Kruimeltjes zijn weer op :9

In <%# %> statements kan je een if-statement gebruiken.

[ Voor 11% gewijzigd door gorgi_19 op 09-08-2008 15:46 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • edeboeck
  • Registratie: Maart 2005
  • Laatst online: 17-11 16:38

edeboeck

mie noow noooothing ...

De InvalidCastException wijst op een typeprobleem. Mijn gok is dat er nu in "textmode" nog woorden zitten als waarden (bv "multiline"). De oplossing zou dan zijn deze te vervangen door de waarden die bij de enum horen. Desnoods schrijf je hiervoor een kleine functie.

Hieronder de definitie van de enum (waar je dus de juiste numerieke waarden kunt uit afleiden:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

namespace System.Web.UI.WebControls
{
    // Summary:
    //     Specifies the behavior mode of the text box.
    public enum TextBoxMode
    {
        // Summary:
        //     Represents single-line entry mode.
        SingleLine = 0,
        //
        // Summary:
        //     Represents multiline entry mode.
        MultiLine = 1,
        //
        // Summary:
        //     Represents password entry mode.
        Password = 2,
    }
}

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
edeboeck schreef op zaterdag 09 augustus 2008 @ 16:01:
De InvalidCastException wijst op een typeprobleem. Mijn gok is dat er nu in "textmode" nog woorden zitten als waarden (bv "multiline"). De oplossing zou dan zijn deze te vervangen door de waarden die bij de enum horen. Desnoods schrijf je hiervoor een kleine functie.

Hieronder de definitie van de enum (waar je dus de juiste numerieke waarden kunt uit afleiden:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

namespace System.Web.UI.WebControls
{
    // Summary:
    //     Specifies the behavior mode of the text box.
    public enum TextBoxMode
    {
        // Summary:
        //     Represents single-line entry mode.
        SingleLine = 0,
        //
        // Summary:
        //     Represents multiline entry mode.
        MultiLine = 1,
        //
        // Summary:
        //     Represents password entry mode.
        Password = 2,
    }
}
Klopt, textmode is gewoon een string met waarden als "MultiLine" e.d.
Ik heb je oplossing even geprobeerd en deze vervangen door integer waarden van resp. 0 en 1, maar ik krijg nog steeds de exception. Datatype in de (MySQL) database is integer. Ik denk dat TextMode echt een waarde uit TextBoxMode wil zien..

edit: ik heb het nu als volgt:
code:
1
<%# ((TextBoxMode)DataBinder.Eval(Container.DataItem, "textmode")) %>

Waarbij textmode dus een integer met waarden uit TextBoxMode is, dit werkt niet.

[ Voor 7% gewijzigd door Intrepidity op 09-08-2008 16:36 ]


  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

En als je Enum.Parse gebruikt op de string value?

code:
1
(TextBoxMode)Enum.Parse(typeof(TextBoxMode), DataBinder.Eval(Container.DataItem, "textmode"))


Oh, ik lees net dat je de int value al hebt. Als die niet werkt zou ik de int of string waarde doorsturen naar een method in de codebehind en daar kijken waarom de cast niet goed gaat:

<%#GetTextmode(...)%>

[ Voor 39% gewijzigd door Mozin op 09-08-2008 17:11 ]


  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
Mozin schreef op zaterdag 09 augustus 2008 @ 17:00:
En als je Enum.Parse gebruikt op de string value?

code:
1
(TextBoxMode)Enum.Parse(typeof(TextBoxMode), DataBinder.Eval(Container.DataItem, "textmode"))


Oh, ik lees net dat je de int value al hebt. Als die niet werkt zou ik de int of string waarde doorsturen naar een method in de codebehind en daar kijken waarom de cast niet goed gaat:

<%#GetTextmode(...)%>
Ik moest nog even een .ToString() uitvoeren op het resultaat van DataBinder.Eval, maar voor de rest klopte je oplossing als een bus, bedankt voor de hulp _/-\o_
Pagina: 1