问题描述:
在项目中,有一个发布消息的任务。原先做出来的是,任务发步接收部门职能选择一个,这样的逻辑很明显的是错误的,因为同样的任务内容,发布给不同的部门,这样就需要重复发送多次了。应该做成的是:同一个任务,如果发布给不同的接收部门,那么接收部门可以多选。
涉及知识点:
EasyUI 联动+分割函数+一般处理程序
项目实现:
Html页面:
<body> <form id="Form1" method="post" runat="server">
<div class="easyui-tabs" style="width: 1050px; height: auto;">
<div title="新发布任务" style="padding: 10px; width: 1050px; height: 480px">
<div>
<h1>任 务 名 称:<input id="txtWorkName" name="txtWorkName" class="easyui-validatebox" required="true" name="txtWorkName" class="" type="text" /><br />
</h1>
<h1>发 布 单 位:<input id="txtPublishDepart" name="txtPublishDepart" class="easyui-validatebox" required="true" name="txtPublishDepart" type="text" /><br />
</h1>
<h1>接 收 部 门:<input id="unitCategory" name="unitCategory" class="easyui-combobox" data-options="
url: 'SearchKeys.ashx?method=GetUnitCategory' ,
panelHeight:'auto',
method: 'get',
valueField: 'name',
textField: 'unittype',
panelWidth: 112,
onSelect:function(rec){
var url = 'SearchKeys.ashx?method=QueryUnitName'+ '&Type='+rec.unittype;
$('#unitName').combobox('clear'),
$('#unitName').combobox('reload', url); } " />
<input id="unitName" class="easyui-combobox" name="txtReceiveDepart" data-options="
valueField:'departmentname',
multiple:true,
textField:'departmentname'" />
</h1>
</div>
<asp:FileUpload ID="FileUpload1" runat="server" /><span style="font-size:smaller;color:red;" >*注意附件格式只能是:rar 或是zip 或是doc </span>
<div style="width: inherit; height: inherit;">
<FTB:FreeTextBox ID="WorkContent" runat="server" Width="690" Height="400px" Language="zh-CN" ToolbarStyleConfiguration="OfficeMac"></FTB:FreeTextBox>
</div>
<div>
<asp:Button ID="cmdSubmit" runat="server" Text="发布任务" OnClick="cmdSubmit_Click" />
<br />
</div>
</div>
</div>
</form>
</body>
注意:
1 :var url: 'SearchKeys.ashx?method=GetUnitCategory' 是用来提交到一般处理程序,进行获取各个部门所属的类别,
2:onSelect:function(rec){
var url = 'SearchKeys.ashx?method=QueryUnitName'+ '&Type='+rec.unittype;
$('#unitName').combobox('clear'),
$('#unitName').combobox('reload', url); } " />
这是选中下拉框内容后,响应的一个函数,提交到一般出来程序,获取选中类别下的所有部门。
3: multiple:true,是允许下拉框内容多选。
这样实现了通过类别获取该类别下面的所属部门联动并可以多选接收部门
一般处理程序:
/// <summary> /// SearchKeys 的摘要说明
/// </summary>
public class SearchKeys : IHttpHandler
{
private HttpContext context = null;
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
this.context = context;
string method = context.Request["method"];
switch (method)
{
case "GetUnit":
GetUnit(context);
break;
case "GetUnitCategory":
GetUnitCategory(context);
break;
case "QueryUnitName":
GetUnitName(context);
break;
default:
break;
}
}
/// <summary>
/// 根据类别获取该类别下面的所有市直单位
/// </summary>
/// <param name="context"></param>
private void GetUnitName(HttpContext context)
{
string Type = context.Request.QueryString["Type"].ToString();
EvaluationSystem.BLL.UnitBaseInfoBLL getUnitByTypeBll = new UnitBaseInfoBLL();
DataSet dtUnitInfo = getUnitByTypeBll.GetList("Category='"+Type+"'");
String json = Dataset2JsonCom(dtUnitInfo);
context.Response.Write(json);
}
//自动补全
private void GetUnit(HttpContext context)
{
context.Response.ContentType = "json";
string para = context.Request["para"];
EvaluationSystem.BLL.UnitBaseInfoBLL allUnitBll = new UnitBaseInfoBLL();
DataSet dtUnitInfo = allUnitBll.GetList("");
String json = Dataset2JsonCom(dtUnitInfo);
context.Response.Write(json);
}
/// <summary>
/// 获取市直单位类别
/// </summary>
/// <param name="context"></param>
private void GetUnitCategory(HttpContext context)
{
//context.Response.ContentType = "json";
//string para = context.Request["para"];
//EvaluationSystem.BLL.UnitBaseInfoBLL allUnitBll = new UnitBaseInfoBLL();
//DataSet dtUnitInfo = allUnitBll.GetList("");
//String json = Dataset2JsonCom(dtUnitInfo);
//context.Response.Write(json);
SystemDictionaryBLL dictionaryBll = new SystemDictionaryBLL();
SystemDictionaryEntity enSystemDictionary = new SystemDictionaryEntity();
DataTable dt = new DataTable();
enSystemDictionary.Name = "市直单位";
dt = dictionaryBll.SelectUnitType(enSystemDictionary);
string strJson = DataTable2JsonCom(dt);
//返回给界面
context.Response.Write(strJson);
context.Response.End();
}
#region DataSet转换成Json格式
/// <summary>
/// DataSet转换成Json格式
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2JsonCom(DataSet ds, int total = -1)
{
StringBuilder json = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
//json.Append("[");
json.Append(DataTable2JsonCom(dt));
//json.Append("]");
//json.Append("");
} return json.ToString();
}
#endregion
#region dataTable转换成Json格式
/// <summary>
/// dataTable转换成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2JsonCom(DataTable dt, int pid = -1)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
int id = pid;
jsonBuilder.Append("\"");
dt.Columns[j].ColumnName = dt.Columns[j].ColumnName.ToLower();
if (dt.Columns[j].ColumnName == "Name") dt.Columns[j].ColumnName = "text";
jsonBuilder.Append(dt.Columns[j].ColumnName);
if (dt.Columns[j].ColumnName.ToLower() == "id" && id != -1)
{
jsonBuilder.Append("\":" + (id * 10 + Convert.ToInt32(dt.Rows[i][j])) + ",");
}
else
{
jsonBuilder.Append("\":\"" + dt.Rows[i][j].ToString() + "\",");
}
}
if (dt.Columns.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
#endregion dataTable转换成Json格式
public bool IsReusable
{
get
{
return false;
}
}
}
C#后台:
string ReceiveDepart= Request.Form["txtReceiveDepart"]; string[] strids = ReceiveDepart.ToString().Split(',');
for (int i = 0; i < strids.Length; i++)
{
EvaluationSystem.Model.NoticeEntity noticeEntity = new NoticeEntity();
noticeEntity.PublishDepart = Request.Form["txtPublishDepart"];
noticeEntity.ReceiveDepart = strids[i].ToString();
noticeEntity.Title = Request.Form["txtWorkName"];
noticeEntity.PublishTime = (DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day);
noticeEntity.Text = WorkContent.Text;
EvaluationSystem.BLL.NoticeBLL noticeBll = new NoticeBLL();
try
{
if (FileUpload1.HasFile)
{
//定义文件路径全路径名称
string fullFileName = this.FileUpload1.PostedFile.FileName;
//文件名称
string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\\") + 1);
//文件类型
string type = fullFileName.Substring(fullFileName.LastIndexOf(".") + 1);
if (type == "rar" || type == "zip" || type == "doc")
{
//this.FileUpload1.PostedFile.SaveAs(Server.MapPath("UpLoadFile/") + "\\" + fileName);
//this.Label1.Text = "您上传的文件是" + fileName;
FileUpload1.PostedFile.SaveAs(Server.MapPath("UpLoadFile/") + fullFileName);
noticeEntity.FileAddress = fileName;
}
}
if (noticeBll.Add(noticeEntity))
{
Response.Write("<script>alert('对" + strids[i].ToString() + "发布成功!')</script>");
}
else
{
添加失败提示
Response.Write("<script>alert('发布失败!')</script>");
}
}
catch (Exception ex)
{
Response.Write("<script>alert(\"" + ex.Message + "\");</script>");
}
}
注意:
string[] strids = ReceiveDepart.ToString().Split(',');是获取前台接收部门选中的多个部门,通过分割函数进行分割。其中的循环结构,通过获取分割后的长度,来进行循环,然后将每条记录添加到数据库中;进而实现一个调息的多发。
问题小结:
这里主要还是EasyUI的框架,在这个框架下,实现了联级操作,选中下拉框中的多行数据,并通过一般处理程序进行动态交互,配合VS自带的分割函数,从而实现消息的多发。