在我们的网站中,我们创建了一个流程,管理员用户可以使用 jQuery-UI 对话框流程更改标签中显示的文本,当他们处于编辑模式时,单击文本区域(标签)会在对话框中显示该文本框,他们可以更改它,添加工具提示,甚至是日期范围。我们认为能够使用 ckeditor 来编辑更长的新闻项目或更长的指令标签会很棒。除了实际从数据库中获取要编辑的文本或在 ckeditor 实例中获取已编辑的文本并将其保存到数据库之外,一切正常。有很多代码,但与此同时,我将首先介绍 jQuery 代码,以及生成对话框的 .Net 标记。如果这个代码对每个人来说都不错,我会发布更多的幕后代码。
$(function () {
$("#dialog-markup").dialog(
{
autoOpen: false,
height: 600,
width: 600,
modal: true,
buttons:
{
"Save": function () {
var GuiText = $(".gui_markup_text").val();
if (GuiText == "")
GuiText == " ";
var GuiToolTipText = $(".gui_markup_tooltip").val();
if (GuiToolTipText == "")
GuiToolTipText == " ";
editableControl[0].innerHTML = GuiText;
var guiKey = "";
if ($(editableControl).attr('gui_key') != null)
guiKey = $(editableControl).attr('gui_key');
else
guiKey = $(editableControl).attr('id');
var MarkupGui = new Object();
MarkupGui.key = guiKey;
MarkupGui.levels = $('input.hidden_Levels').val();
MarkupGui.effectiveDate = $('.gui_markup_date_eff').val();
MarkupGui.terminationDate = $('.gui_markup_date_trm').val();
MarkupGui.textValue = GuiText;
MarkupGui.toolTip = GuiToolTipText;
//MarkupGui.hidden = hidFlag
var DTO = { 'mg': MarkupGui };
$.ajax({
type: "POST",
url: "GuiConfigWS.asmx/SaveMarkupToDB",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(DTO),
success: AjaxSuccess,
error: AjaxFailure
}); //end of ajax call
$(this).dialog("close");
return false;
},
"Cancel": function () {
$(this).dialog("close");
} //End of Cancel button
} //end of buttons
}); //end of dialog
}); //标记匿名函数结束
key 和 hidden_levels 是保存在我们数据库中的值,用于识别这是用于哪个标签以及将其应用到哪个区域。关键代码适用于我们拥有 asp.net 控件与标准 html 控件的情况。我们使用跨度的 id 作为数据库中的键值。在 Asp.net 控件上,我们添加了一个名为“gui_key”的属性,其作用类似于 id。
我们有类似的代码,它只是创建一个可以编辑的简单文本字符串,它就像一个魅力。您甚至可以为该文本添加标签,但我们更愿意让用户使用 ckeditor 而不必“知道” html 标签以进行特殊格式设置。
用于创建对话框的 .net 标记如下:
<div id="dialog-markup" class="markup" title="Edit Formated Text">
<p>Use this editor below to add formated text.</p>
<label id="lbl_Markup" for="txt_Markup">Formated Text: </label><br />
<CKEditor:CKEditorControl ID="txt_Markup" CssClass="data gui_markup_text" runat="server" Toolbar="Source|Bold|Italic|Underline|Strike|-|Subscript|Superscript
Cut|Copy|Paste|PasteText|PasteFromWord
Undo|Redo|-|Find|Replace|-|RemoveFormat
NumberedList|BulletedList|-|Outdent|Indent|Table
/
JustifyLeft|JustifyCenter|JustifyRight|JustifyBlock
Styles|Format|Font|FontSize|TextColor|BGColor"></CKEditor:CKEditorControl>
<label id="lbl_MarkupEffDate" for="txt_MarkupEffDate">Start Date: </label>
<input id="txt_MarkupEffDate" type="text" name="Eff_Date" class="dateField data gui_markup_date_eff" /><br />
<label id="lbl_MarkupTrmDate" for="txt_MarkupTrmDate">End Date: </label>
<input id="txt_MarkupTrmDate" type="text" name="Trm_Date" class="dateField data gui_markup_date_trm"/><br />
<label id="lbl_MaarkupToolTip" for="txt_MarkupToolTip">Tool Tip: </label>
<input id="txt_MarkupToolTip" type="text" name="ToolTip" class="gui_markup_tooltip" />
</div>
我将在后续帖子中添加更多代码,用于 GuiConfigWS.asmx Web 服务、对此的示例调用以及处理该过程的类。
这是在代码中使用的示例:
<span id="info_Street1" class="editable markup" title="<%= GetGuiToolTip("info_Street1")%>"><%= GetGuiString("info_Street1")%></span>
这是 GuiConfigWS.asmx:
<%@ WebService Language="C#" Class="GuiConfigWS" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
using CKEditor;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class GuiConfigWS : System.Web.Services.WebService
{
public class MarkupGui
{
public string typeOfDialog { get; set; }
public string key { get; set; }
public string levels { get; set; }
public string effectiveDate { get; set; }
public string terminationDate { get; set; }
public string textValue { get; set; }
public string toolTip { get; set; }
}
[System.Web.Script.Services.ScriptMethod]
[WebMethod(EnableSession = true)]
public string SaveMarkupToDB(MarkupGui mg) //removed 'static' after public on Dave Ward's advice...
{
GuiConfig gc = new GuiConfig("[REDACTED - CONNECTION STRING INFO");
gc.SetValue(mg.key, mg.levels, mg.effectiveDate, mg.terminationDate, mg.textValue, mg.toolTip, 0); //Convert.ToInt32(mg.hidden));
return "testString"; //temp return until the rest of the code is written.
} //end of SaveMarkupToDB
同样,我们有另一个完全可以工作的版本。我将推迟添加我们用来做这些事情的类,如果你们想看到它,在这里发布,我会发布它。但是,它很长,我想我已经在推动最大密度了……谢谢,布拉德。