2016-03-01 8 views
6

Ecco parte del mio modelloCome impostare la lunghezza massima di parola separata della stringa di proprietà C# EF

public class Sensor 
{ 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(40)] 
    public string Name { get; set; } 
} 

Nome è un testo depositato chi è avere una lunghezza massima di 40 simboli. E in questo campo di testo è possibile avere poche parole.

La mia domanda è è possibile impostare la lunghezza massima della parola nella proprietà Nome?

Ad esempio è disponibile: "Motion Detector". E voglio che la parola sia al massimo 8 simboli. Questo significa che Motion e Detector devono avere una lunghezza inferiore a 8 simboli. L'utente non può scrivere come "MotionDetector" la cui lunghezza è di 12 simboli.

risposta

4

Un modo è possibile utilizzare il setter nella proprietà per controllare la lunghezza max per parola:

set { 
    string[] words = value.Split(' ') 
    if (words.Any(x => x.Length > 8)){ 
     //error, do something 
    } else { //OK, pass 
     Name = value; //only update Name if the length for all words are valid 
    } 
} 
+1

C'è una parentesi sbagliata dietro la lunghezza :) Deve essere posizionato dopo l'otto :) – Jannik

+0

@Jannik hai ragione! L'ho aggiornato già. Grazie! – Ian

+0

Grazie per l'aiuto – evelikov92

3

Idealmente, si dovrebbe avere una chiara separazione tra modelli di dati (generato da EF) e visualizzare i modelli (usato per legare). Pertanto, è necessario convalidare i dati utente in base alla definizione del modello di vista, non alla definizione del modello di dati.

In MVC, attributo MaxLength non intende ingresso massimo consentito convalida, StringLength è un attributo di convalida, come explanained here.

Nel tuo caso particolare:

// this is the data model 
public class Sensor 
{ 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(40)] 
    public string Name { get; set; } 
} 

// this is the data model 
public class SensorViewModel 
{ 
    public int Id { get; set; } 

    [Required] 
    [StringLength(8)] 
    public string Name { get; set; } 
} 

Se si utilizza MVC, SensorViewModel sarà il vostro @model.

Per trasferire facilmente i dati tra Sensor e SensorViewModel è possibile utilizzare una libreria di automapping. Per esempio. AutoMapper.

Se non si utilizza MVC, esistono alternative per WPF e Windows Forms. In breve, è possibile evitare il codice boilerplate di una semplice convalida utilizzando gli attributi.

Problemi correlati