Добре, Micro$oft или някой друг наистина трябва да направи нещо по въпроса, междувременно тук е резултатът от часове отстраняване на грешки:
Това решение използва функция за директно качване (вече има в Tinymce, но е деактивирана по подразбиране) и с някои jquery хакове инжектираме изображението в текстовото поле.
Промяната на размерите трябва да се извърши след инжектиране на изображението. В последните версии на Tinymce те също добавиха някои хубави инструменти за редактиране на изображения, които също работят с този метод.
Сега кодът:
Това е действието, което трябва да бъде поставено в контролер: (Внимавайте за маршрутизирането)
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>";
}
И това е пълният код за Tinymce, той ще генерира текстово поле и няколко скрити полета. Той също така ще направи екземпляр на tinymce с активирани някои добавки.
<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>
Трябва да създадете папка с име „Изображения“ в корена на вашия проект за качване на изображения. Нуждаете се също от Tinymce js файл и jquery.
Променете действието на формуляра според вашите настройки!!!
Можете също да изберете да използвате html помощници. Не ги харесвам. но ако желаете, използвайте ги вместо тази ръчно изработена форма.
Идеята е от тук, но беше направено в python, така че го пренаписах, за да работи с ASP.NET MVC5 и най-новата версия на TinyMCE.
Ще продължа да работя по това през следващите няколко дни и ще редактирам този отговор, ако е необходимо.
person
Vahid Amiri
schedule
09.11.2015