Javascript t在Ajax调用填充时,页面的适当元素/部分中未呈现TinyMCE
我正在MVC项目中使用TinyMCE作为HTML编辑器。在页面加载时,一切似乎都很好(页面可以加载TinyMCE的多个实例),但是,如果我通过Ajax将另一个TinyMCE实例添加到DOM中,则TextArea将位于加载时添加到页面的最后一个TinyMCE的正下方 TinyMCE加载页面前后的工作: 应提供安置详情: 问题是“Blank”应该位于页面的另一个部分,而似乎是在最后一个TinyMCE之后“append” TinyMCE位于Javascript t在Ajax调用填充时,页面的适当元素/部分中未呈现TinyMCE,javascript,ajax,asp.net-mvc,tinymce,mvc-editor-templates,Javascript,Ajax,Asp.net Mvc,Tinymce,Mvc Editor Templates,我正在MVC项目中使用TinyMCE作为HTML编辑器。在页面加载时,一切似乎都很好(页面可以加载TinyMCE的多个实例),但是,如果我通过Ajax将另一个TinyMCE实例添加到DOM中,则TextArea将位于加载时添加到页面的最后一个TinyMCE的正下方 TinyMCE加载页面前后的工作: 应提供安置详情: 问题是“Blank”应该位于页面的另一个部分,而似乎是在最后一个TinyMCE之后“append” TinyMCE位于~/Shared/EditorTemplates/Edit
~/Shared/EditorTemplates/EditHtml.cshtml
中:
@* TinyMCE 4.7.9 (2018-02-27) *@
<script src="@Url.Content("~/Scripts/tinymce/tinymce.js")" type="text/javascript"></script>
Selector: @ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty)<br />
Name: @ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)<br />
@Html.TextArea(string.Empty,
(string)ViewData.TemplateInfo.FormattedModelValue
)
<script type="text/javascript">
$(document).ready(function () {
initTinyMCE(
'#@ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty)',
'@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)'
);
});
</script>
调用foreach
横幅的父视图(滑块编辑):
@model x.Entities.Content.Sliders.Slider
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@* Omitting other fields *@
<div class="form-group">
@Html.Label("Banners", htmlAttributes: new { @class = "control-label col-md-2" })
<div id="Banners_@Model.Oid" class="sortable col-md-10">
@foreach (var banner in Model.Banners.OrderByDescending(b => b.Order.HasValue).ThenBy(b => b.Order).ThenBy(b => b.Name))
{
@Html.Partial("~/Views/Banners/_Edit.cshtml", banner)
}
</div>
@Html.ValidationMessageFor(model => model.Banners, "", new { @class = "text-danger" })
<div class="form-group">
<div class="col-md-12" style="float: right;">
<br />
@Ajax.ActionLink(
"Add Banner",
"Newbanner",
"Banners",
new { id = Model.Oid },
new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "Banners_" + @Model.Oid,
},
new { style = "btn btn-info" }
)
</div>
</div>
</div>
}
每个横幅(~/Views/Banners/_Edit.cshtml):
请告诉我是否应该添加任何其他信息。“如果我通过Ajax向DOM添加另一个TinyMCE实例”。。。执行此操作的代码在哪里?您只共享了在document ready上初始化TinyMCE的代码,您认为这是有效的。Ajax调用正在检索“~/shared/EditorTemplates/EditHtml.cshtml”,但我将在一个小时左右发布所有代码。@z很好,我已经更新了OP,如果我仍然缺少一些关键的东西,请告诉我。也许这与在页面加载后动态添加tinymce编辑器有关。您是否尝试过类似的方法:
tinymce.EditorManager.execCommand('mceAddEditor',true,“here\u place\u editor\u class或ID”)代码>在初始化另一个实例之后,它只是tinymce字段没有正确附加?_Edit partial中的其他字段附加得好吗?
@model x.Entities.Content.Sliders.Slider
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@* Omitting other fields *@
<div class="form-group">
@Html.Label("Banners", htmlAttributes: new { @class = "control-label col-md-2" })
<div id="Banners_@Model.Oid" class="sortable col-md-10">
@foreach (var banner in Model.Banners.OrderByDescending(b => b.Order.HasValue).ThenBy(b => b.Order).ThenBy(b => b.Name))
{
@Html.Partial("~/Views/Banners/_Edit.cshtml", banner)
}
</div>
@Html.ValidationMessageFor(model => model.Banners, "", new { @class = "text-danger" })
<div class="form-group">
<div class="col-md-12" style="float: right;">
<br />
@Ajax.ActionLink(
"Add Banner",
"Newbanner",
"Banners",
new { id = Model.Oid },
new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "Banners_" + @Model.Oid,
},
new { style = "btn btn-info" }
)
</div>
</div>
</div>
}
public PartialViewResult NewBanner(Guid id)
{
Banner newBanner = new Banner() { SliderID = id, Name = "New Banner", Content = "Blank" };
return PartialView("_Edit", newBanner);
}
@model x.Entities.Content.Sliders.Banner
@using (Html.BeginCollectionItem("Banners"))
{
@* OMitting other fields *@
<div class="form-group">
@Html.LabelFor(model => model.Content, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Content, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Content, "", new { @class = "text-danger" })
</div>
</div>
}
public class Banner : BaseObject
{
//Omitting ther fields
[UIHint("EditHtml")]
[Column(TypeName = "varchar(MAX)")]
[DataType(DataType.MultilineText)]
[AllowHtml]
public string Content { get; set; }
}