Sharepoint evento oggetto di aggiornamento - annullare evento torna alla pagina EditForm?
-
20-09-2019 - |
Domanda
Ho un ricevitore di eventi per un tipo di contenuto per convalidare alcuni dati in caso ItemUpdating. Se cancello l'evento (alcuni dei dati non è valida per esempio), ho impostato le proprietà Cancel su true:
properties.Cancel = true;
properties.ErrorMessage = "...";
SharePoint annulla l'evento di aggiornamento ok, ma mostra la pagina di errore di SharePoint standard (con il messaggio specificato). L'unico problema è, ho una denuncia che questo non è in realtà molto utile -. Dovremmo tornare alla pagina EditForm in modo che i dettagli possono essere aggiornati
Qualcuno ha fatto questo, c'è un modo semplice? L'unico suggerimento che ho avuto è che posso realizzare il mio pagina di errore, ma questo è un bel suono soluzione pesante per un (teoricamente) processo semplice.
Soluzione
Si potrebbe provare a codice output HTML (che include JavaScript pure) nella ErrorMessage. Ma anche se lo fai, il problema è che non si ha modo sicuro tornare ai dati che l'utente ha inserito. O si fa un HTTP / redirect 301 e poi è un nuovo caricamento della pagina, oppure fai il cliente andare history.back()
con JavaScript e poi il browser può ricaricare la pagina.
Il modo ufficiale di questa operazione è che si crea una definizione di elenco e personalizzare il modello di elenco. Poi si modifica il modello di modulo di modifica e di includere il maggior numero di controlli ASP.Net di convalida, se necessario. Quindi, implementare la logica lato server di cui hai bisogno. Questo articolo spiega la tecnica: http://msdn.microsoft.com/en- us / library / aa543922.aspx
EDIT: Per collegare un controllo personalizzato per la modifica di un ContentType specifica, si aggiunge una sezione XMLDocument alla definizione ContentType. Per esempio, come questo
<ContentType
..........
<XmlDocuments>
<XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<FormTemplates xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<Display>ContentTypeName_DispForm</Display>
<Edit>ContentTypeName_EditForm</Edit>
<New>ContentTypeName_NewForm</New>
</FormTemplates>
</XmlDocument>
</XmlDocuments>
.......
Quindi si crea un tuo file yoursolution_controltemplates.ascx
, che contiene oltre tali blocchi: "
<SharePoint:RenderingTemplate ID="ContentTypeName_DispForm" runat="server">
<Template>
<!-- put whatever controls you need here, we typically create a
separate custom control which implements everything-->
</Template>
</SharePoint:RenderingTemplate>
Altri suggerimenti
Si può cercare di reindirizzare utilizzando CopyUtil: http://weblogs.asp.net/jan/archive/2008/02/26/copyutil-aspx-a-little-sharepoint-gem.aspx
Page.Response.Redirect (link)
Forse questo funzionerà