Può capitare di voler riutilizzare una pagina dei Dynamic Data (al di fuori della cartella dei Dynamic Data), e questo per avere "a gratis" le validazioni dei campi, oppure semplicemente perchè utilizzano dei FiledTemplate custom (su cui magari abbiamo investito parecchio tempo).
Nel mio caso, la necessità è nata dal voler far editare le informazioni della propria Azienda, senza dare accesso all'utente alla lista delle Aziende (percorso che viene normalemente proposto con i Dynamic Data: visualizzazione lista aziende -> dettaglio azienda).
COME FARE?
Per fare ciò è sufficiente copiare la pagina nel nuovo percorso e modificare il Global.asax in modo da aggiungere le regole di routing appropriate:
1: routes.Add(new DynamicDataRoute("Edit/Company.aspx")
2: {
3: Action = PageAction.Edit,
4: Model = model,
5: Table = "Companies"
6: });
All'interno della pagina copiata, si dovranno valorizzare le proprietà EntitySetName e ContextTypeName della EntityDataSource, altrimenti si presenterà il seguente errore:
The control 'DetailsDataSource' does not have a TableName property and a table name could not be inferred from the URL.
Nel caso si utilizzi i Dynamic Data con LINQ to SQL, le proprietà da modificare sono TableName e ContextTypeName della LinqDataSource.
Se la pagina prevede eventuali parametri in querystring, dovranno essere presenti nell'url della pagina, oppure dovrete essere voi a settarli andando ad aggiungere da codice gli appropriati WhereParameters, e cancellando il controllo DynamicQueryStringParameter (contenuto nella datasource).