我正在我的程序中实现一个消息传递系统。它的功能与电子邮件一样,只是它完全包含在系统中。
我想知道是否有人看到过我可以修改的电子邮件控制模板。它将包含收件箱、消息查看和消息发送部分等内容。
我只需将邮件的发送和接收部分重新连接到我的连接到我的表上。
谢谢!
<>编辑:
好吧,我没意识到我写了这么多。如果你用这个的话,一定要相信Biff-Magriff。D
技术是.NET 3.5和亚音速3.0
其余的都在我的答案中。
最后应该是这样。(减去我所有的剪纸)
web.config文件
<pages>
<控件>
…
<add tagprefix=“cc”tagname=“messagefolder”src=“~/usercontrols/messages/messagefolder/messagefolder.ascx”/>gt;
<add tagprefix=“cc”tagname=“messageview”src=“~/usercontrols/messages/messageview/messageview.ascx”/>
<add tagprefix=“cc”tagname=“messagecompose”src=“~/usercontrols/messages/messagecompose/messagecompose.ascx”/>gt;
<add tagprefix=“cc”tagname=“messagebox”src=“~/usercontrols/messages/messagebox/messagebox.ascx”/>gt;
…
</controls>
&页;
< /代码>
应用程序代码/IMessagefolder.cs
使用系统;
使用system.collections.generic;
使用system.linq;
使用system.web;
///<摘要>
///IMessageFolder的摘要说明
///</summary>
公共接口IMessageFolder
{
int?消息ID获取;
}
< /代码>
应用程序代码/自定义数据视图.cs
使用系统;
使用system.collections;
使用system.collections.generic;
使用系统数据;
使用system.data.linq;
使用system.linq;
使用system.web;
///<摘要>
///自定义数据视图的摘要说明
///</summary>
公共类CustomDataView
{
/亚音速DB
static vac.data.vac db db=新vac.data.vac db();
公共类消息查询
{
公共类消息
{
public int messageid_get;set;
public string fromuser_get;set;
公共字符串touser get;set;
公共日期时间SentDate get;set;
公共字符串主题get;set;
公共字符串主体get;set;
public bool isDeletedSender_get;set;
public bool isDeletedRecipient获取;设置;
公共bool isread get;set;
}
公共枚举mailtype receivedmail,sentmail
public message[]getmessages(mailtype mt,bool showdeleted)
{
list<message>mymessages=新建列表<message>();
foreach(var v in(从m in db.messages
哪里(mt==mailtype.receivedmail?m.touserid:m.fromuserid)==common.currentuserid
&&(显示已删除!(mt==mailtype.receivedmail?m.isDeleted收件人:m.isDeleted发件人)
orderby m.sentdate降序
选择M)
{
message mess=new message();
message.messageid=v.messageid;
mess.fromuser=(从u到db.users,其中u.userid==v.from userid选择u.username).first();
mess.touser=(从u到db.users,其中u.userid==v.touserid选择u.username).first();
mess.sentdate=v.sentdate;
mess.subject=v.subject;
mess.body=v.body;
mess.isdeletedssender=v.isdeletedssender;
mess.isDeletedRecipient=v.isDeletedRecipient;
mess.isread=v.isread;
mymessages.add(混乱);
}
返回mymessages.toarray();
}
公共消息getmessage(int messageid)
{
var mymessage=(来自db.messages中的m,其中m.messageid==messageid选择m);
if(mymessage.count()==1)
{
var v=mymessage.first();
message mess=new message();
message.messageid=v.messageid;
mess.fromuser=(从u到db.users,其中u.userid==v.from userid选择u.username).first();
mess.touser=(从u到db.users,其中u.userid==v.touserid选择u.username).first();
mess.sentdate=v.sentdate;
mess.subject=v.subject;
mess.body=v.body;
返回混乱;
}
其他的
返回空;
}
}
}
< /代码>
应用程序代码/common.cs
使用系统;
使用system.collections.generic;
使用system.web;
使用system.web.ui;
使用system.web.ui.webcontrols;
使用system.web.sessionstate;
使用system.web.configuration;
使用系统数据;
使用system.text;
使用system.collections;
使用系统。全球化;
使用system.linq;
///<摘要>
///常用的摘要说明
///</summary>
公共类公共
{
///<摘要>
///从GridView中检索列的索引。如果找不到,返回-1。
///</summary>
///<param name=“gv”></param>
///<param name=“columnname”></param>
///<退货></退货>
静态公共int getcolumnindex(gridview gv,string columnname)
{
int-returnme=-1;
对于(int i=0;i<gv.columns.count;i++)
{
if(gv.columns[i].headerText==columnname)
{
返回= i;
断裂;
}
}
归还归还我;
}
//网格视图的颜色
静态公共字符串bgcolorred=“ff8888”;
静态公共字符串bgColorRedAlternate=“ff0000”;
静态公共字符串bgColorBlue=“aaff”;
静态公共字符串bgcolorbluealternate=“444444ff”;
静态公共字符串bgColorGreen=“2bf053”;
静态公共字符串bgColorGreenAlternate=“27c319”;
静态公共字符串bgColorOrange=“ffa365”;
静态公共字符串bgColorOrangeAlternate=“ff6600”;
静态公共字符串NormalBgColour(对象发送程序)
{
返回“*”+
((GridView)sender).rowstyle.backcolor.r.toString(“x”)。+
((GridView)发件人).rowstyle.backcolor.g.toString(“x”)。+
((gridview)sender).rowstyle.backcolor.b.toString(“x”);
}
静态公共字符串AlternateBgColor(对象发送程序)
{
返回“*”+
((GridView)发件人).AlternatingRowstyle.BackColor.R.ToString(“X”)。+
((GridView)发件人)。AlternatingRowsStyle.BackColor.G.ToString(“X”)。+
(GridView)sender).AlternatingRowstyle.BackColor.B.ToString(“X”);
}
静态公共字符串selectedbgcolour(对象发送程序)
{
string selectedbgcolour=“165EA9”;
如果(!)((GridView)发件人)。SelectedRowStyle.BackColor.IsEmpty)
{
selectedbgcolour=“”+
(gridview)sender).selectedrowstyle.backcolor.r.toString(“x”)。+
(gridview)sender).selectedrowstyle.backcolor.g.toString(“x”)。+
(gridview)sender).selectedrowstyle.backcolor.b.toString(“x”);
}
返回所选背景颜色;
}
///<摘要>
///GridView行数据绑定扩展。
///通过单击一行来允许行选择,并在鼠标悬停时以黄色突出显示该行。
///</summary>
///<param name=“sender”></param>
///<param name=“e”></param>
静态公共void gridview_rowdatabound(对象发送方,gridviewrowEventargs e)
{
if(e.row.dataitemindex=-1)
返回;
//e.row.attributes.add(“onclick”,((gridview)sender).page.clientscript.getPostbackEventReference((gridview)sender,“select$”+e.row.rowindex.toString(),false));
string selectedbgcolour=selectedbgcolour(发送方);
字符串normalbgcolour=normalbgcolour(发送方);
string alternatebgcolor=alternatebgcolor(sender);
应用Y轴或W轴(例如,行、所选B颜色、标准B颜色、交替B颜色);
}
静态公共void applystylingtorow(gridviewrow行,string selectedbgcolour,string normalbgcolour,string alternatebgcolour)
{
appendattribute(行,“onMouseOver”,
“this.style.cursor='pointer';this.style.background='yellow';”);
appendattribute(行,“onMouseOut”,
“this.style.background=''+((row.rowstate&datacontrolrowstate.selected)==datacontrolrowstate.selected?”所选背景颜色:
(row.rowstate&datacontrolrowstate.alternate)==datacontrolrowstate.alternate?AlternateBgColor:NormalBgColor)+“';”);
}
静态公共void gridviewaddrowclick(gridview gv,gridview row row,bool isrender)
{
appendattribute(row,“onclick”,gv.page.clientscript.getPostbackEventReference(gv,“select$”+row.rowIndex.toString(),isrender)+“;”);
/*
对于(int i=0;i<gv.columns.count;i++)
如果(!)string.isNullOrEmpty(gv.columns[i].headerText)&&row.cells.count>1)
appendattribute(row.cells[i],“onclick”,gv.page.clientscript.getPostbackEventReference(gv,“select$”+row.rowIndex.toString(),isrender)+“;”);
**
}
静态公共void gridviewrowclick_render(gridview gv)
{
foreach(gv.rows中的gridviewrow行)
if(row.rowtype==DataControlRowType.DataRow)
GridView添加行单击(gv,row,true);
gv.page.clientscript.registerforeventvalidation(gv.uniqueid)验证;
}
///<摘要>
///隐藏GridView上的列。
///</summary>
///<param name=“gv”></param>
///<param name=“ColumnIndex”></param>
静态公共void hidecolumn(gridview gv,int columnindex)
{
如果(gv.headerrow!=空)
gv.headerRow.cells[columnIndex].style.add(“显示”,“无”);
foreach(gv.rows中的gridviewrow行)
{
if(row.rowtype==DataControlRowType.DataRow)
row.cells[columnindex].style.add(“display”,“none”);
}
}
///<摘要>
///注册要运行的javascript。
///</summary>
///<param name=“con”></param>
///<param name=“script”></param>
静态公共void registerstartupscript(对象con,字符串脚本)
{
寄存器startupscript((control)con,script);
}
///<摘要>
///将字符串的开头大写
///</summary>
///<param name=“strtext”></param>
公共静态字符串initcap(字符串strtext)
{
返回new cultureinfo(“en”).textinfo.toitlecase(strtext.tolower());
}
///<摘要>
///注册要运行的javascript。
///</summary>
///<param name=“con”></param>
///<param name=“script”></param>
静态公共void registerstartupscript(control con,string script)
{
scriptmanager sm=scriptmanager.getcurrent(con.page);
如果(SM)!=空)
scriptmanager.registerStartupscript(con,con.getType(),guid.newguid().toString(),script,true);
其他的
con.page.clientscript.registerStartupscript(typeof(page),guid.newguid().toString(),script,true);
}
///<摘要>
///注册要包含在页面中的javascript文件。
///</summary>
///<param name=“con”></param>
///<param name=“url”></param>
静态公共void RegisterClientScriptInclude(控件con,字符串url)
{
scriptmanager sm=scriptmanager.getcurrent(con.page);
如果(SM)!=空)
scriptmanager.registerClientScriptinclude(con,con.getType(),guid.newguid().toString(),system.web.hosting.hostingEnvironment.applicationVirtualPath+url);
其他的
con.page.clientscript.registerClientScriptinclude(typeof(page),guid.newguid().toString(),system.web.hosting.hostingenvironment.applicationvirtualpath+url);
}
public static int current userid get return(从新vac.data.vacdb()中的u返回。其中u.user name==httpcontext.current.user.identity.name选择u.userid的用户)。first();
公共类MessageComposeEventArgs:EventArgs
{
公共int?sendtouserid获取;设置;
公共字符串主题get;set;
public messagecomposeEventArgs()。
{
}
public messagecomposeEventArgs(int sendtouserid)
{
this.sendtouserid=sendtouserid;
}
public messagecomposeEventargs(int sendtouserid,string subject)
{
this.sendtouserid=sendtouserid;
this.subject=主题;
}
}
}
< /代码>
应用程序代码/extendedcommandfield.cs
使用系统;
使用system.collections.generic;
使用system.componentmodel;
使用system.linq;
使用system.web;
使用system.web.ui;
使用system.web.ui.webcontrols;
///<摘要>
///允许删除的扩展<请参阅cref=“commandfield”/>
///待用户确认。
///</summary>
公共类extendedcommandField:commandField
{
///<摘要>
///初始化单元格。
///</summary>
公共重写void InitializeCell(DataControlFieldCell单元,
DataControlCellType CellType、DataControlRowState RowState、Int RowIndex)
{
base.initializeCell(单元格,CellType,RowState,RowIndex);
如果(!)string.isNullOrEmpty(this.DeleteConfirmationText)和this.ShowDeleteButton)
{
foreach(cell.controls中的控件控件)
{
ibutontrol button=控制为ibutontrol;
如果(按钮)!=空&&button.commandname==“删除”)
//添加删除确认
((webcontrol)control).attributes.add(“onclick”,string.format)
(如果)!confirm(“0”)返回false;“,this.deleteConfirmationText));
}
}
}
#区域删除确认文本
///<摘要>
///删除确认文本。
///</summary>
[类别(“行为”)]
[说明(“向用户显示确认删除的文本。”)]
公共字符串DeleteConfirmationText
{
get将此.viewstate[“deleteConfirmationText”]作为字符串返回;
设置this.viewstate[“删除确认文本”]=值;
}
γ端区
}
< /代码>
~/usercontrols/messages/messagefolder/messagefolder.ascx
<%@control language=“c”autoeventwireup=“true”codefile=“messagefolder.ascx.cs”
inherits=“用户控件\u邮件\u邮件文件夹\u邮件文件夹”%>
<asp:updatepanel id=“up1”runat=“server”>
<内容模板>
<asp:hiddenfield id=“hfmessageid”runat=“server”/>
<asp:button id=“butfresh”runat=“server”text=“检查新消息”/>gt;<asp:button
id=“butchompose”runat=“server”text=“compose new message”onclick=“butchompose\u click”/><asp:复选框
autopostback=“true”id=“cbshowDeleted”runat=“server”text=“显示已删除邮件”
oncheckedChanged=“cbshowDeleted_checkChanged”/>
<asp:gridview id=“gvmessages”runat=“server”datakeynames=“messageid”autogenerateColumns=“false”
onRowDatabound=“gvMessages_RowDatabound”onSelectedIndexChanged=“gvMessages_SelectedIndexChanged”
onRowDeleting=“gvMessages_RowDeleting”width=“100%”style=“float:left;”>
列;
<asp:boundfield datafield=“messageid”insertvisible=“false”/>
<cc:extendedCommandField DeleteConfirmationText=“是否确定要删除此记录?”
deletetext=“delete”showDeleteButton=“true”/>
<asp:boundfield datafield=“fromuser”headertex=“from”/>
<asp:boundfield datafield=“touser”headertex=“to”/>
<asp:模板字段>
<headerTemplate>
发送日期</headertemplate>
<项目模板>
<asp:label id=“lbl1”runat=“server”text=<%bind(“sentdate”)%>'style=“white space:nowrap;”/></itemtemplate>
</asp:templatefield>
<asp:boundField datafield=“subject”headerText=“subject”itemstyle width=“100%”/>
</columns>
</asp:gridview>
</contenttemplate>
</asp:updatepanel>
< /代码> <和电子邮件一样,只是它完全包含在系统中。
我想知道是否有人看到过我可以修改的电子邮件控制模板。它有收件箱、查看邮件和发送邮件等功能。
我只需将邮件的发送和接收部分重新连接到我的桌子上。
谢谢!
编辑:
好吧,我没意识到我写了这么多。如果你用这个的话,一定要相信Biff-Magriff。D
技术是.NET 3.5和亚音速3.0
其余的在我的答案里。
最后应该是这样。(减去我所有的切口)

Web.CONFIG
<pages>
<controls>
...
<add tagPrefix="cc" tagName="MessageFolder" src="~/UserControls/Messages/MessageFolder/MessageFolder.ascx"/>
<add tagPrefix="cc" tagName="MessageView" src="~/UserControls/Messages/MessageView/MessageView.ascx"/>
<add tagPrefix="cc" tagName="MessageCompose" src="~/UserControls/Messages/MessageCompose/MessageCompose.ascx"/>
<add tagPrefix="cc" tagName="MessageBox" src="~/UserControls/Messages/MessageBox/MessageBox.ascx"/>
...
</controls>
<pages>
应用程序代码/IMessagefolder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for IMessageFolder
/// </summary>
public interface IMessageFolder
{
int? MessageID { get; }
}
应用程序代码/customdataviews.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for CustomDataViews
/// </summary>
public class CustomDataViews
{
//Subsonic db
static VAC.Data.VACDB db = new VAC.Data.VACDB();
public class MessageQuery
{
public class Message
{
public int MessageID { get; set; }
public string FromUser { get; set; }
public string ToUser { get; set; }
public DateTime SentDate { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public bool IsDeletedSender { get; set; }
public bool IsDeletedRecipient { get; set; }
public bool IsRead { get; set; }
}
public enum MailType { ReceivedMail, SentMail };
public Message[] GetMessages(MailType mt, bool showDeleted)
{
List<Message> myMessages = new List<Message>();
foreach (var v in (from m in db.Messages
where (mt == MailType.ReceivedMail ? m.ToUserID : m.FromUserID) == Common.CurrentUserID
&& (showDeleted || !(mt == MailType.ReceivedMail ? m.IsDeletedRecipient : m.IsDeletedSender))
orderby m.SentDate descending
select m))
{
Message mess = new Message();
mess.MessageID = v.MessageID;
mess.FromUser = (from u in db.Users where u.UserID == v.FromUserID select u.UserName).First();
mess.ToUser = (from u in db.Users where u.UserID == v.ToUserID select u.UserName).First();
mess.SentDate = v.SentDate;
mess.Subject = v.Subject;
mess.Body = v.Body;
mess.IsDeletedSender = v.IsDeletedSender;
mess.IsDeletedRecipient = v.IsDeletedRecipient;
mess.IsRead = v.IsRead;
myMessages.Add(mess);
}
return myMessages.ToArray();
}
public Message GetMessage(int MessageID)
{
var myMessage = (from m in db.Messages where m.MessageID == MessageID select m);
if (myMessage.Count() == 1)
{
var v = myMessage.First();
Message mess = new Message();
mess.MessageID = v.MessageID;
mess.FromUser = (from u in db.Users where u.UserID == v.FromUserID select u.UserName).First();
mess.ToUser = (from u in db.Users where u.UserID == v.ToUserID select u.UserName).First();
mess.SentDate = v.SentDate;
mess.Subject = v.Subject;
mess.Body = v.Body;
return mess;
}
else
return null;
}
}
}
应用程序代码/common.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.SessionState;
using System.Web.Configuration;
using System.Data;
using System.Text;
using System.Collections;
using System.Globalization;
using System.Linq;
/// <summary>
/// Summary description for Common
/// </summary>
public class Common
{
/// <summary>
/// Retrieves the index of the column from the gridview. Returns -1 if not found.
/// </summary>
/// <param name="gv"></param>
/// <param name="columnName"></param>
/// <returns></returns>
static public int GetColumnIndex(GridView gv, string columnName)
{
int returnMe = -1;
for (int i = 0; i < gv.Columns.Count; i++)
{
if (gv.Columns[i].HeaderText == columnName)
{
returnMe = i;
break;
}
}
return returnMe;
}
//Colours for gridviews
static public string BGColourRed = "#FF8888";
static public string BGColourRedAlternate = "#FF0000";
static public string BGColourBlue = "#AAAAFF";
static public string BGColourBlueAlternate = "#4444FF";
static public string BGColourGreen = "#2bf053";
static public string BGColourGreenAlternate = "#27c319";
static public string BGColourOrange = "#FFA365";
static public string BGColourOrangeAlternate = "#FF6600";
static public string NormalBGColour(object sender)
{
return "#" +
((GridView)sender).RowStyle.BackColor.R.ToString("X") +
((GridView)sender).RowStyle.BackColor.G.ToString("X") +
((GridView)sender).RowStyle.BackColor.B.ToString("X");
}
static public string AlternateBGColour(object sender)
{
return "#" +
((GridView)sender).AlternatingRowStyle.BackColor.R.ToString("X") +
((GridView)sender).AlternatingRowStyle.BackColor.G.ToString("X") +
((GridView)sender).AlternatingRowStyle.BackColor.B.ToString("X");
}
static public string SelectedBGColour(object sender)
{
string selectedBGColour = "#165EA9";
if (!((GridView)sender).SelectedRowStyle.BackColor.IsEmpty)
{
selectedBGColour = "#" +
((GridView)sender).SelectedRowStyle.BackColor.R.ToString("X") +
((GridView)sender).SelectedRowStyle.BackColor.G.ToString("X") +
((GridView)sender).SelectedRowStyle.BackColor.B.ToString("X");
}
return selectedBGColour;
}
/// <summary>
/// Gridview RowDataBound extension.
/// Allows row selection by clicking on a row and highlights the row in yellow on the mouse hover.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static public void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItemIndex == -1)
return;
//e.Row.Attributes.Add("onclick", ((GridView)sender).Page.ClientScript.GetPostBackEventReference((GridView)sender, "Select$" + e.Row.RowIndex.ToString(), false));
string selectedBGColour = SelectedBGColour(sender);
string normalBGColour = NormalBGColour(sender);
string alternateBGColour = AlternateBGColour(sender);
ApplyStylingToRow(e.Row, selectedBGColour, normalBGColour, alternateBGColour);
}
static public void ApplyStylingToRow(GridViewRow row, string selectedBGColour, string normalBGColour, string alternateBGColour)
{
AppendAttribute(row, "onMouseOver",
"this.style.cursor='pointer'; this.style.background='yellow';");
AppendAttribute(row, "onMouseOut",
"this.style.background='" + ((row.RowState & DataControlRowState.Selected) == DataControlRowState.Selected ? selectedBGColour :
(row.RowState & DataControlRowState.Alternate) == DataControlRowState.Alternate ? alternateBGColour : normalBGColour) + "';");
}
static public void GridViewAddRowClick(GridView gv, GridViewRow row, bool isRender)
{
AppendAttribute(row, "onclick", gv.Page.ClientScript.GetPostBackEventReference(gv, "Select$" + row.RowIndex.ToString(), isRender) + ";");
/*
for (int i = 0; i < gv.Columns.Count; i++)
if (!string.IsNullOrEmpty(gv.Columns[i].HeaderText) && row.Cells.Count > 1)
AppendAttribute(row.Cells[i], "onclick", gv.Page.ClientScript.GetPostBackEventReference(gv, "Select$" + row.RowIndex.ToString(), isRender) + ";");
* */
}
static public void GridViewRowClick_Render(GridView gv)
{
foreach (GridViewRow row in gv.Rows)
if (row.RowType == DataControlRowType.DataRow)
GridViewAddRowClick(gv, row, true);
gv.Page.ClientScript.RegisterForEventValidation(gv.UniqueID);
}
/// <summary>
/// Hides a column on a gridview.
/// </summary>
/// <param name="gv"></param>
/// <param name="columnIndex"></param>
static public void HideColumn(GridView gv, int columnIndex)
{
if (gv.HeaderRow != null)
gv.HeaderRow.Cells[columnIndex].Style.Add("display", "none");
foreach (GridViewRow row in gv.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
row.Cells[columnIndex].Style.Add("display", "none");
}
}
/// <summary>
/// Registers javascript to be run.
/// </summary>
/// <param name="con"></param>
/// <param name="script"></param>
static public void RegisterStartupScript(object con, string script)
{
RegisterStartupScript((Control)con, script);
}
/// <summary>
/// Capitalizes the beginning of strings
/// </summary>
/// <param name="strText"></param>
public static string InitCap(string strText)
{
return new CultureInfo("en").TextInfo.ToTitleCase(strText.ToLower());
}
/// <summary>
/// Registers javascript to be run.
/// </summary>
/// <param name="con"></param>
/// <param name="script"></param>
static public void RegisterStartupScript(Control con, string script)
{
ScriptManager sm = ScriptManager.GetCurrent(con.Page);
if (sm != null)
ScriptManager.RegisterStartupScript(con, con.GetType(), Guid.NewGuid().ToString(), script, true);
else
con.Page.ClientScript.RegisterStartupScript(typeof(Page), Guid.NewGuid().ToString(), script, true);
}
/// <summary>
/// Registers a javascript file to be included in the page.
/// </summary>
/// <param name="con"></param>
/// <param name="url"></param>
static public void RegisterClientScriptInclude(Control con, string url)
{
ScriptManager sm = ScriptManager.GetCurrent(con.Page);
if (sm != null)
ScriptManager.RegisterClientScriptInclude(con, con.GetType(), Guid.NewGuid().ToString(), System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath + url);
else
con.Page.ClientScript.RegisterClientScriptInclude(typeof(Page), Guid.NewGuid().ToString(), System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath + url);
}
public static int CurrentUserID { get { return (from u in new VAC.Data.VACDB().Users where u.UserName == HttpContext.Current.User.Identity.Name select u.UserID).First(); } }
public class MessageComposeEventArgs : EventArgs
{
public int? SendToUserID { get; set; }
public string Subject { get; set; }
public MessageComposeEventArgs()
{
}
public MessageComposeEventArgs(int SendToUserID)
{
this.SendToUserID = SendToUserID;
}
public MessageComposeEventArgs(int SendToUserID, string Subject)
{
this.SendToUserID = SendToUserID;
this.Subject = Subject;
}
}
}
应用程序代码/extendedcommandfield.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
/// <summary>
/// An extended <see cref="CommandField"/> that allows deletions
/// to be confirmed by the user.
/// </summary>
public class ExtendedCommandField : CommandField
{
/// <summary>
/// Initialize the cell.
/// </summary>
public override void InitializeCell(DataControlFieldCell cell,
DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (!string.IsNullOrEmpty(this.DeleteConfirmationText) && this.ShowDeleteButton)
{
foreach (Control control in cell.Controls)
{
IButtonControl button = control as IButtonControl;
if (button != null && button.CommandName == "Delete")
// Add delete confirmation
((WebControl)control).Attributes.Add("onclick", string.Format
("if (!confirm('{0}')) return false;", this.DeleteConfirmationText));
}
}
}
#region DeleteConfirmationText
/// <summary>
/// Delete confirmation text.
/// </summary>
[Category("Behavior")]
[Description("The text shown to the user to confirm the deletion.")]
public string DeleteConfirmationText
{
get { return this.ViewState["DeleteConfirmationText"] as string; }
set { this.ViewState["DeleteConfirmationText"] = value; }
}
#endregion
}
~/usercontrols/messages/messagefolder/messagefolder.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MessageFolder.ascx.cs"
Inherits="UserControls_Messages_MessageFolder_MessageFolder" %>
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:HiddenField ID="hfMessageID" runat="server" />
<asp:Button ID="butRefresh" runat="server" Text="Check for new Messages" /><asp:Button
ID="butCompose" runat="server" Text="Compose New Message" OnClick="butCompose_Click" /><asp:CheckBox
AutoPostBack="true" ID="cbShowDeleted" runat="server" Text="Show Deleted Messages"
OnCheckedChanged="cbShowDeleted_CheckChanged" />
<asp:GridView ID="gvMessages" runat="server" DataKeyNames="MessageID" AutoGenerateColumns="false"
OnRowDataBound="gvMessages_RowDataBound" OnSelectedIndexChanged="gvMessages_SelectedIndexChanged"
OnRowDeleting="gvMessages_RowDeleting" Width="100%" Style="float: left;">
<Columns>
<asp:BoundField DataField="MessageID" InsertVisible="false" />
<cc:ExtendedCommandField DeleteConfirmationText="Are you certain you wish to delete this record?"
DeleteText="Delete" ShowDeleteButton="true" />
<asp:BoundField DataField="FromUser" HeaderText="From" />
<asp:BoundField DataField="ToUser" HeaderText="To" />
<asp:TemplateField>
<HeaderTemplate>
Sent Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%# Bind("SentDate") %>' Style="white-space: nowrap;" /></ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Subject" HeaderText="Subject" ItemStyle-Width="100%" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>