Domanda

Mi chiedo solo se qualcuno ha qualche idea su come possiamo modellare i modelli ... Come se volessi cambiare la MaxLength di una casella di testo come posso fare per farlo.

Quello che vorrei poter fare è qualcosa di simile a quello che posso fare in WPF con stili e modelli ... In WPF puoi passare attraverso gli stili ai modelli e scegliere dove applicare quegli stili ... Per istanze se l'utente imposta la larghezza su un controllo (che è il modello), all'interno del codice di controllo posso scegliere di applicare quella larghezza a qualsiasi elemento desiderato all'interno del modello o a nessuno ...

Quindi mi chiedevo se qualcuno sapesse qualcosa di simile?

È stato utile?

Soluzione

Ho pubblicato una risposta a una domanda simile qui .

Se si desidera stili generici, è possibile derivare i modelli dei modelli personalizzati dalla classe TemplateViewModel di base che supporterà gli stili richiesti:

public interface ITextSpecifier
{
  int? Size { get; }
  bool AutoGrow { get; }
}

public class TemplateViewModel<T> where T: class
{
  public IDictionary<string, string> Attributes { get; }
  public ITextSpecifier TextStyle { get; private set; }
  public IColorSpecifier ColorStyle { get; }
  public T TextStyle(int size, bool autogrow)
  {
     TextStyle = new TextSpecifier(size, autogrow);
     return this;
  }
}

public class TextBoxViewModel: TemplateViewModel<TextBoxViewModel>
{
}

<%= Html.EditorFor(x => new TextBoxViewModel(Model.StringData).TextStyle(10, false)) %>

Nel modello:

<!-- template page derived from typed control for TextBoxViewModel -->
<input type='text' <%= Model.TextStyle.Size != null 
    ? "size='" + Model.TextStyle.Size + "'" : "" %> ... />

È un po 'di lavoro, ecco perché spero che inventeranno un metodo comune nella versione MVC v2.

Altri suggerimenti

La soluzione qui è usare i metadati! È possibile riutilizzare l'attributo di convalida dell'annotazione dei dati StringLength qui. Crea un nuovo provider di metadati che legge la lunghezza massima dall'attributo StringLength e lo inserisce nel dizionario AdditionalValues. Il provider di metadati deve ereditare da DataAnnotationsModelMetadataProvider. E poi nel modello che crei, in DisplayTemplates o EditorTemplates, puoi accedere alla lunghezza massima della stringa.

Il modo più semplice per farlo, per quanto ne so, è creare un ID HTML per la casella di testo come mostrato di seguito:

  @Html.EditorFor(model => model.Description, null, "Description", null)

E alla fine della pagina, scrivi il seguente javascript

 <script type="text/javascript">
        $(function () { $("#Description").css("width","450"); });    
 </script>

NB: - Anche io odio MVC !!!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top