Integrando o TinyMCE editor html no ASP.NET MVC
Realizei todo o processo de acordo com o DevCast https://www.devmedia.com.br/integrando-o-tinymce-editor-html-no-asp-net-mvc/32932 porém está me ocorrendo um erro assim que o formulário carrega na página:
Uncaught TypeError: $(...).tinymce is not a function
Stella Oliveira
Curtidas 0
Melhor post
Jothaz
31/07/2019
Nos campos do tipo textarea normalmente tem-se que definir rows e cols, tente:
Html.TextAreaFor(model => model.Descricao, new { @class = "resizer" }) Html.TextAreaFor(model => model.Descricao, 10, 40, null); Html.TextAreaFor(model => model.Descricao, new { @class = "whatever-class", @cols = 10, @rows = 40 })
GOSTEI 1
Mais Respostas
Jothaz
30/07/2019
Normalmente este tipo erro acontece por não achar a referencia a tinymce ou pode ser até algum conflito com outra biblioteca.
Tente seguir os seguintes passos:
1 - Limpar o cache (CTRL + F5) ou mesmo limpar no browser.
2 - Garantir que tinymce.min.js ou algo assim esteja sendo referenciado.
3 - A melhor ferramenta para verificar o que foi carregado é o "Inspecionar" (CTRL + Shift + I) do próprio browser. Lá você consegue ver a alma da sua página.
Tente seguir os seguintes passos:
1 - Limpar o cache (CTRL + F5) ou mesmo limpar no browser.
2 - Garantir que tinymce.min.js ou algo assim esteja sendo referenciado.
3 - A melhor ferramenta para verificar o que foi carregado é o "Inspecionar" (CTRL + Shift + I) do próprio browser. Lá você consegue ver a alma da sua página.
GOSTEI 0
Stella Oliveira
30/07/2019
Normalmente este tipo erro acontece por não achar a referencia a tinymce ou pode ser até algum conflito com outra biblioteca.
Tente seguir os seguintes passos:
1 - Limpar o cache (CTRL + F5) ou mesmo limpar no browser.
2 - Garantir que tinymce.min.js ou algo assim esteja sendo referenciado.
3 - A melhor ferramenta para verificar o que foi carregado é o "Inspecionar" (CTRL + Shift + I) do próprio browser. Lá você consegue ver a alma da sua página.
Tente seguir os seguintes passos:
1 - Limpar o cache (CTRL + F5) ou mesmo limpar no browser.
2 - Garantir que tinymce.min.js ou algo assim esteja sendo referenciado.
3 - A melhor ferramenta para verificar o que foi carregado é o "Inspecionar" (CTRL + Shift + I) do próprio browser. Lá você consegue ver a alma da sua página.
Nenhuma das soluções propostas houve exito.
GOSTEI 0
Jothaz
30/07/2019
Você conseguiu confirmar se a biblioteca do tinymce foi devidamente referenciada e carregada.
Veja pelo debug do browser se carregou, pelo erro apresentado pode ser isto.
Ou post o código, mesmo que sejam parte, pois facilita o auxilio.
Veja pelo debug do browser se carregou, pelo erro apresentado pode ser isto.
Ou post o código, mesmo que sejam parte, pois facilita o auxilio.
GOSTEI 0
Stella Oliveira
30/07/2019
Você conseguiu confirmar se a biblioteca do tinymce foi devidamente referenciada e carregada.
Veja pelo debug do browser se carregou, pelo erro apresentado pode ser isto.
Ou post o código, mesmo que sejam parte, pois facilita o auxilio.
Veja pelo debug do browser se carregou, pelo erro apresentado pode ser isto.
Ou post o código, mesmo que sejam parte, pois facilita o auxilio.
- Conferi sim, estou fazendo de outo método agora, porém agora o meu TextAreaFor não está retornando valores para minha Controller..
Minha model:
[AllowHtml] [Display(Name = "Descrição")] [Required(ErrorMessage = "Informe a Descrição", AllowEmptyStrings = false)] public string Descricao { get; set; }
Meu formulário na View (Create)
<div class="form-group"> @Html.LabelFor(model => model.Descricao, htmlAttributes: new { @class = "control-label" }) @Html.TextAreaFor(model => model.Descricao, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Descricao, "", new { @class = "text-danger" }) </div>
Quando mudo o "TextAreaFor" para TextBoxFor funciona, o que poderia ser?
GOSTEI 0
Stella Oliveira
30/07/2019
Nos campos do tipo textarea normalmente tem-se que definir rows e cols, tente:
Html.TextAreaFor(model => model.Descricao, new { @class = "resizer" }) Html.TextAreaFor(model => model.Descricao, 10, 40, null); Html.TextAreaFor(model => model.Descricao, new { @class = "whatever-class", @cols = 10, @rows = 40 })
Infelizmente ainda sem sucesso.
GOSTEI 0
Stella Oliveira
30/07/2019
Nos campos do tipo textarea normalmente tem-se que definir rows e cols, tente:
Html.TextAreaFor(model => model.Descricao, new { @class = "resizer" }) Html.TextAreaFor(model => model.Descricao, 10, 40, null); Html.TextAreaFor(model => model.Descricao, new { @class = "whatever-class", @cols = 10, @rows = 40 })
Infelizmente ainda sem sucesso.
Acabei de analisar o problema mais a fundo, e percebi que quando ele da um refresh na tela ele aparentemente carrega algo que anteriormente não carregou.. imagina o que pode ser?
Um Jquery da vida sei lá..
GOSTEI 0
Jothaz
30/07/2019
Pelo que me lembre deve-se inicializar e ligar o tinymce com o campo tipo:
<script>
tinymce.init({
selector: "#CAMPO"
});
</script>
Foi feito isto?
Só para termos certeza de que o tinymce esta disponível crie um controle textarea no html sem utilizar o razor e veja se funciona:
<script>
tinymce.init({
selector: "#CAMPO"
});
</script>
Foi feito isto?
Só para termos certeza de que o tinymce esta disponível crie um controle textarea no html sem utilizar o razor e veja se funciona:
<textarea id="campo" name="campo" rows="5" cols="33"></textarea>
GOSTEI 0
Jothaz
30/07/2019
Normalmente este tipo de problema é questão de referenciar a bibliotecas, ordem de carregamento ou incompatibilidade entre a versão de algumas bibliotecas ussdas.
Você usa outra bibliotecas jacascritp?
O TyneMCe é simples de usar:
O exemplo acima é funcional, tente adaptá-lo ao seu contexto.
A principio use os controles do html e depois substitua pelo razor.
Você usa outra bibliotecas jacascritp?
O TyneMCe é simples de usar:
<!DOCTYPE html> <html> <head> <script src=''https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js'' referrerpolicy="origin"></script> <script> tinymce.init({ selector: ''#campo'' }); </script> </head> <body> <h1>TinyMCE</h1> <form method="post"> <textarea id="campo">Teste do TinyMCE</textarea> </form> </body> </html>
O exemplo acima é funcional, tente adaptá-lo ao seu contexto.
A principio use os controles do html e depois substitua pelo razor.
GOSTEI 1
Jothaz
30/07/2019
Não sei o porque o código ficou todo zuado, vou postar novamente:
<!DOCTYPE html> <html> <head> <script src='https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js' referrerpolicy="origin"></script> <script> tinymce.init({ selector: '#campo' }); </script> </head> <body> <h1>TinyMCE</h1> <form method="post"> <textarea id="campo">Teste do TinyMCE</textarea> </form> </body> </html>
GOSTEI 1
Stella Oliveira
30/07/2019
Não sei o porque o código ficou todo zuado, vou postar novamente:
<!DOCTYPE html> <html> <head> <script src='https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js' referrerpolicy="origin"></script> <script> tinymce.init({ selector: '#campo' }); </script> </head> <body> <h1>TinyMCE</h1> <form method="post"> <textarea id="campo">Teste do TinyMCE</textarea> </form> </body> </html>
Cara, primeiramente agradeço profundamente o help que está me dando rs, mas aqui, o problema não é aparecer mais o bendito do TextArea e escrever no mesmo.
O erro é o seguinte:
Preencho o textarea do form e dou submit no formulario para enviar para a model/controller, o valor está indo null, ai a model retorna pra mim falando que não pode ser null (porque eu coloquei required dentro da model).
Ai preencho novamente o o TextAreaFor vai preenchido.. e tcharam tudo funciona.
Estou começando a achar que alguma coisa não está carregando, e não faço ideia do que..
Olhei até o meu Layout e não consegui identificar o erro.
GOSTEI 0
Jothaz
30/07/2019
Ajuda remota sem acesso ao ambiente é realmente complicado.
Posta o código do controller que recupera o valor do textarea.
O esquema básico seria:
View:
Controller:
Posta o código do controller que recupera o valor do textarea.
O esquema básico seria:
View:
@model TinyMCE.Controllers.Sua_Classe <!DOCTYPE html> <html> <head> <script src="~/scripts/tinymce/tinymce.min.js"></script> <script type="text/javascript"> tinyMCE.init({ mode: "textareas" }); </script> </head> <body> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div> @Html.TextAreaFor(model => model.HtmlContent) <input type="submit" value="" /> </div> } </body> </html>
Controller:
[HttpPost] public ActionResult Index (Sua_Classe model){ return view() }
GOSTEI 1
Stella Oliveira
30/07/2019
Ajuda remota sem acesso ao ambiente é realmente complicado.
Posta o código do controller que recupera o valor do textarea.
O esquema básico seria:
View:
Controller:
Posta o código do controller que recupera o valor do textarea.
O esquema básico seria:
View:
@model TinyMCE.Controllers.Sua_Classe <!DOCTYPE html> <html> <head> <script src="~/scripts/tinymce/tinymce.min.js"></script> <script type="text/javascript"> tinyMCE.init({ mode: "textareas" }); </script> </head> <body> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div> @Html.TextAreaFor(model => model.HtmlContent) <input type="submit" value="" /> </div> } </body> </html>
Controller:
[HttpPost] public ActionResult Index (Sua_Classe model){ return view() }
Concordo com você , mas acho que o problema não tem haver com a minha Action, nem com a TextArea, o problema está no carregamento do JavaScript vou ter que investigar melhor.
De qualquer forma obrigada pela ajuda !
GOSTEI 0
Stella Oliveira
30/07/2019
Jothaz, FINALMENTE encontrei uma solução..
Na verdade o SUBMIT não estava sendo capaz de enviar o campo "Descrição" no formulário, criei um submit diferente e tudo funcionou, ficou da seguinte forma:
MODEL:
VIEW:
Novo Submit:
SCRIPT da VIEW:
Cara valeu pelo apoio, foi incrível sua participação !!!
Abraço
Na verdade o SUBMIT não estava sendo capaz de enviar o campo "Descrição" no formulário, criei um submit diferente e tudo funcionou, ficou da seguinte forma:
MODEL:
[AllowHtml] [UIHint("tinymce_full")] [Display(Name = "Descrição")] [DataType(DataType.MultilineText)] [Required(ErrorMessage = "Informe a Descrição", AllowEmptyStrings = false)] public string Descricao { get; set; }
VIEW:
<div class="form-group"> @Html.LabelFor(model => model.Descricao, htmlAttributes: new { @class = "control-label" }) @Html.EditorFor(model => model.Descricao, new { htmlAttributes = new { @class = "form-control input" } }) @Html.ValidationMessageFor(model => model.Descricao, "", new { @class = "text-danger" }) </div>
Novo Submit:
<div class="form-group flex justify-center align-center"> <a class="btn-bmg bg-color-3 color-1" href="javascript:submitForm();">Salvar</a> </div>
SCRIPT da VIEW:
<script language="Javascript"> function submitForm() { tinyMCE.triggerSave(); document.forms[0].submit(); } </script>
Cara valeu pelo apoio, foi incrível sua participação !!!
Abraço
GOSTEI 0
Jothaz
30/07/2019
Stella Oliveira de nada, apesar de achar que a ajuda nem foi tão efetiva, mas acontece muito de você conversar com alguém sobre um problema no desenvolvimento e só de conversar você já acaba descobrindo a solução, sem a pessoa inferir.
Hoje em dia no desenvolvimento web temos vários contextos e escopos, pois normalmente usamos: html, css, javascrit, jquery, razor, angular, vue, react e ect, sem falar no back-end.
É uma sopa de letras infernal e tudo tem suas particularidades e muitas das vezes não é possível acompanhar o que acontece, pois de certa forma tudo esta encapsulado.
O conselho que possa dar, somente por vivência é aprender a utilizar a janela debug do borwser (opção inspecionar do menu de contexto). Principalmente do Chrome, pois você ira ver a alma da sua página. Inclusive todas os request e response. Além de ver a interpolação dos dados do seu banck-end com o fornt-end.
Hoje não consigo trabalhar sem ela, principalmente se for utilizar nodesjs.
Boa sorte!
Hoje em dia no desenvolvimento web temos vários contextos e escopos, pois normalmente usamos: html, css, javascrit, jquery, razor, angular, vue, react e ect, sem falar no back-end.
É uma sopa de letras infernal e tudo tem suas particularidades e muitas das vezes não é possível acompanhar o que acontece, pois de certa forma tudo esta encapsulado.
O conselho que possa dar, somente por vivência é aprender a utilizar a janela debug do borwser (opção inspecionar do menu de contexto). Principalmente do Chrome, pois você ira ver a alma da sua página. Inclusive todas os request e response. Além de ver a interpolação dos dados do seu banck-end com o fornt-end.
Hoje não consigo trabalhar sem ela, principalmente se for utilizar nodesjs.
Boa sorte!
GOSTEI 1