Ok, Micro $ oft o qualcun altro ha bisogno di fare davvero qualcosa per questo, nel frattempo ecco il risultato di ore di debugging:
Questa soluzione utilizza la funzione caricamento diretto (già lì in TinyMCE ma disabilitato di default) e con un po 'di jquery abbiamo iniettato l'immagine in textarea.
La modifica delle dimensioni deve essere effettuata dopo l'iniezione dell'immagine. Nelle recenti versioni di Tinymce hanno anche aggiunto alcuni strumenti di modifica delle immagini che funzionano anche con questo metodo.
Ora il codice:
Questa è l'azione che deve essere collocato in un controllore: (Mind the Routing)
public string Upload(HttpPostedFileBase file)
{
string path;
string saveloc = "~/Images/";
string relativeloc = "/Images/";
string filename = file.FileName;
if (file != null && file.ContentLength > 0 && file.IsImage())
{
try
{
path = Path.Combine(HttpContext.Server.MapPath(saveloc), Path.GetFileName(filename));
file.SaveAs(path);
}
catch (Exception e)
{
return "<script>alert('Failed: " + e + "');</script>";
}
}
else
{
return "<script>alert('Failed: Unkown Error. This form only accepts valid images.');</script>";
}
return "<script>top.$('.mce-btn.mce-open').parent().find('.mce-textbox').val('" + relativeloc + filename + "').closest('.mce-window').find('.mce-primary').click();</script>";
}
E questo è il codice completo per TinyMCE, verrà generato un casella di testo e un paio di campi nascosti. Creerà anche un'istanza di tinymce con alcuni plugin abilitati.
<iframe id="form_target" name="form_target" style="display:none"></iframe>
<form id="my_form" action="/admin" target="form_target" method="post" enctype="multipart/form-data" style="width:0;height:0;overflow:hidden">
<input name="file" type="file" onchange="$('#my_form').submit();this.value='';">
</form>
<script type="text/javascript">
tinymce.init({
selector: "textarea",
theme: "modern",
plugins: [
"advlist autolink lists link image charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars code fullscreen",
"insertdatetime media nonbreaking save table contextmenu directionality",
"emoticons template paste textcolor colorpicker textpattern imagetools"
],
toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
toolbar2: "print preview media | forecolor backcolor emoticons | ltr rtl",
image_advtab: true,
templates: [
{title: 'Test template 1', content: 'Test 1'},
{title: 'Test template 2', content: 'Test 2'}
],
file_browser_callback: function(field_name, url, type, win) {
if(type=='image') $('#my_form input').click();
}
});
</script>
<textarea id="my_editor" class="mceEditor">This will be an editor.</textarea>
Hai bisogno di fare una cartella denominata "Immagini" nella root del progetto per il caricamento delle immagini. Hai anche bisogno di Tinymce js file e jquery.
Modificare l'azione del modulo in base alla configurazione !!!
Si può anche scegliere di utilizzare helper HTML. Non mi piacciono ma vai avanti e usa quelli invece di questa forma fatta a mano se vuoi.
L'idea è da here ma è stata eseguita in python, quindi l'ho riscritta per funzionare con ASP.NET MVC5 e l'ultima versione di TinyMCE.
Continuerò a lavorare su questo nei prossimi giorni e modificherò questa risposta se necessario.
Sì, c'è un modo, il mio ultimo progetto lo ha fatto, posso pubblicare il codice stasera se nessuno ha risposto per allora, non ricordo della parte superiore della mia testa come è stato raggiunto. –
L'ho appena fatto e funziona perfettamente! vedi il mio altro post (risposta) – VSG24