【问题标题】:Html as string on MVC5 RazorHtml 作为 MVC 5 Razor 中的字符串
【发布时间】:2014-10-02 02:36:37
【问题描述】:

目前,我将 Html 存储在数据库中并填充到像这样的下拉列表中,我在 Razor 中使用@funcion:

private string getHtmlTemplate()
{
    string value = "<select id='htmlTemplate'><option value=''>Html Template</option>";
    int i = 0;
    foreach (AdminHtmlTemplateModel htmlTemplateModel in Model.GetAdminHtmlTemplates())
    {
        value += string.Format("<option value='{0}'>{1}</option>", htmlTemplateModel.templateCode, htmlTemplateModel.templateName);
        //value += string.Format("<option value='{0}'>{1}</option>", i++, htmlTemplateModel.templateName);
        templateCodes.Add(htmlTemplateModel.templateCode);
    }

    value += "</select>";
    return value;
}

问题是存储在 templateCode 上的 Html 与当前的 html 文件发生冲突/合并 如何解决这个问题,我仍然希望这些 Html 值与编辑器一起使用。 我尝试了某种方式,例如仅传递索引和函数的选项标记的值:

@fucntion{
 private string getHtmlTemplate()
{
    string value = "<select id='htmlTemplate'><option value=''>Html Template</option>";
    int i = 0;
    foreach (AdminHtmlTemplateModel htmlTemplateModel in Model.GetAdminHtmlTemplates())
    {
        value += string.Format("<option value='{0}'>{1}</option>", i++, htmlTemplateModel.templateName);
    }

    value += "</select>";
    return value;
 }
}

<script>
$("#htmlTemplate").kendoDropDownList({
        change: function (e) {
            editor.exec("inserthtml", { value:@Model.GetAdminHtmlTemplateCodeByIndex(@:e.sender.value()) });
        }
    });
</script>

但它不起作用,因为我们不能将 razor 的 jquery 值传递给函数,对吧?

请帮助我。谢谢

【问题讨论】:

  • 为什么不把 " 换成 ' ?
  • 将模板放在局部视图中并通过JS加载
  • 大家都试过@Html.Encode()吗?
  • 我发现我可以在 Razor 中使用 javascript escape/unescape 对 Html 值进行编码/解码,但主要问题是与 KendoUI MVC 编辑器的 CustomControl 一起使用时,它不允许将 Html 插入编辑器。谢谢大家的回复。

标签: asp.net-mvc razor


【解决方案1】:

谢谢各位, 经过几个小时的研究,我发现我可以使用 sn-ps 来解决我的问题,而不是在 Kendo UI MVC 中使用 CustomControl。

private List<AdminHtmlTemplateModel> getHtmlTemplate()
{
    ////string value = "<select id='htmlTemplate'><option value=''>Html Template</option>";
    ////int i = 0;
    ////foreach (AdminHtmlTemplateModel htmlTemplateModel in Model.GetAdminHtmlTemplates())
    ////{
    ////    //value += string.Format("<option value='{0}'>{1}</option>", htmlTemplateModel.templateCode, htmlTemplateModel.templateName);
    ////    value += string.Format("<option value='{0}'>{1}</option>", i++, htmlTemplateModel.templateName);
    ////    templateCodes.Add(htmlTemplateModel.templateCode);
    ////}

    ////value += "</select>";
    ////return value;
    return Model.GetAdminHtmlTemplates();
}

@(Html.Kendo().Editor().Enccode(false)
                                              .Name("EmailBody")
                                              .Tools(tools => tools
                                                  .ViewHtml()
//.CustomTemplate(ct => ct.Template(getHtmlTemplate())) // before
.Snippets(s => //after fixed
{ 
    foreach (var item in getHtmlTemplate())
   {
        s.Add(item.templateName, item.templateCode);
    }
})

就是这样。它解决了我在 Kendo UI MVC 编辑器中插入 Html 的问题。

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 2014-09-20
    • 2017-06-12
    • 2017-02-25
    • 2015-03-25
    • 2014-10-15
    • 2015-02-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多