好的,Micro$oft 或其他人需要真正为此做点什么,同时这里是数小时调试的结果:
这个解决方案使用直接上传功能(在 Tinymce 中已经有,但默认禁用),并且通过一些 jquery hack,我们将图像注入到 textarea。
必须在注入图像后更改尺寸。在最近的 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>
您需要在项目根目录中创建一个名为“Images”的文件夹来上传图片。您还需要 Tinymce js 文件和 jquery。
根据您的设置更改表单的操作!!!
您也可以选择使用 html 助手。我不喜欢他们。但是,如果您愿意,请继续使用它们来代替这种手工制作的形式。
这个想法来自here,但它是在 python 中完成的,所以我重写了它以使用 ASP.NET MVC5 和最新版本的 TinyMCE。
我会在接下来的几天里继续努力,如有必要,我会编辑这个答案。