2011-01-30 10 views
5

Sto utilizzando l'helper EditorFor() per eseguire il rendering del modello di modifica nella visualizzazione personale e desidero chiamare lo DisplayFor() all'interno di questo modello per eseguire il rendering del modello di visualizzazione.È possibile utilizzare DisplayFor() dall'interno del controllo modello EditorFor

Ti piace questa

questo è all'interno del /Shared/EditorTemplates/Client.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BusinessNext.Models.Ef.Client>" %> 
<%: Html.DisplayFor(client=>client) %> 

Nel modello DisplayFor rendo la proprietà del cliente. Il modello DisplayFor funziona perfettamente quando chiamato da qualsiasi altro luogo, ma dal modello EditorFor non rende nulla. Sembra che la chiamata DisplayFor() non arrivi mai effettivamente al modello DisplayFor.

risposta

3

Temo che l'unico modo è quello di utilizzare un parziale:

<%= Html.Partial("~/Views/Home/DisplayTemplates/Client.ascx", Model) %> 
+0

Ho provato con <% Html.RenderPartial (MVC.Shared.Views.DisplayTemplates.Client, Model); %> poiché utilizzo T4MVC e non trova il controllo utente della vista. Restituisce l'errore standard, cercando le directory e non trovandolo. Altrimenti, il mio T4MVC ha funzionato tutto il tempo finora. – mare

+0

né lo fa, stesso errore <% = Html.Partial (MVC.Shared.Views.DisplayTemplates.Client)%> - c'è qualcosa di speciale in queste due cartelle? – mare

+0

@mare, no, non dovrebbe esserci nulla di speciale. Prova a passare una stringa per vedere se fa alcuna differenza. Inoltre, cosa indica la posizione cercata nel messaggio di errore? Danno qualche suggerimento? –

1

Può essere discutibile, se si tratta di una buona idea al modello oggetti complicati, o se il mio approccio ai modelli annidati è un hack o non. Il vantaggio di questo è avere un singolo modello per il genitore e il bambino possono avere entrambi i modelli piuttosto che dover scegliere/utilizzare viste parziali.

Tutto questo a parte, le viste basate su modelli possono essere nidificate, se si utilizza una vista parziale come una via di mezzo.

Il modello esterno avrà qualcosa di simile sotto dove si desidera posizionare il modello interno:

Html.RenderPartial("SharedDisplayGoBetweenForFoo", item); 

condivisi parziale sarebbe simile a questa:

@model Foo 

@Html.DisplayFor(a => a); 

Il modello interno sarebbe poi essere chiamato e sembrerebbe un altro.

Problemi correlati