如果要修改公告的信息,先在HTML页面的自定义操作列里面的button获取它的ID 点击事件
btns += '<button type="button" class="layui-btn layui-btn-xs" onclick=updateNotice(' + noticeId + ')>修改</button>';
还需要设置隐藏域的Id,方便后面获取,这个隐藏域是位于另一个视图里面的,与点击事件与跳转页面不是同一个视图,而这个视图将在控制器修改公告信息的UpdateNotice方法里添加视图(这个方法名称根据自身情况而定)。
@ ViewBag.noticeId放到value是为了接收到控制器那边的数据,如果要获取这个Id就可以通过input里面的主键来获取它的值。
<input type="hidden" id="noticeId" name="NoticeID" value="@ViewBag.noticeId" />
下面图中是跳转到修改的控制器页面,updateNotice 就是btn里面是点击事件而noticeId不用说,肯定也是btn 获取到的Id。然后href里面就是修改公告控制器代码的路径。
function updateNotice(noticeId) {
window.location.href = "/SystemManagement/IssuanceNotice/UpdateNotice?noticeId=" + noticeId;//修改公告页面
}
进入修改控制器,修改公告的信息,先创建一个修改信息的方法UpdateNotice,然后获取id noticeId,它是一个int类型,int后面加上一个?表示可为空的意思。在这里添加视图,用if else ,重定向到登录页面,Redirect方法里面放登录页面的路径。noticeId 放到添加修改页面的视图层的隐藏域的value值里面。
public ActionResult UpdateNotice(int? noticeId)
{
if (Session["UserID"] != null)
{
//清空session
Session.Remove("sessionFiles");
ViewBag.noticeId = noticeId;
return View();
}
else
{
//重定向到登录
return Redirect("/Main/Login");
}
}
声明一个全局变量noticeId ,根据隐藏域里面的id值获取里面的内容。获取id后就要获取公告信息,post请求获取URL、形参、实参,还有回调函数回填数据
回到控制器创建一个方法,联表查询数据库是数据,公告类型ID(用于回填下拉框信息,不需要公告类型名称),公告类型明细ID,浏览次数,是否置顶,new显示天数。
接下来查询对应的轮播图信息,根据公告ID来查询轮播图中的信息。
接下判断不等于空。在这里需要创建一个NoticeVo的类,我们把返回的公告信息以及公告类型信息、对应的轮播图信息都返回到NoticeVo里面。
public class NoticeVo:Models.PW_NoticeTable
{
/// <summary>
/// 公告类型ID
/// </summary>
public int NoticeTypeID { get; set; }
/// <summary>
/// 编辑者
/// </summary>
public string Editor { get; set; }
/// <summary>
/// 公告类别名称
/// </summary>
public string NoticeTypeName { get; set; }
/// <summary>
/// 公告类别明细名称
/// </summary>
public string NoticeTypeDetailName { get; set; }
/// <summary>
/// 发布时间 字符串
/// </summary>
public string ReleaseTimeStr { get; set; }
/// <summary>
/// 是否是轮播
/// </summary>
public bool noticeCarousel { get; set; }
/// <summary>
/// 轮播图片地址
/// </summary>
public string NoticeCarouselImage { get; set; }
/// <summary>
/// 是否是新公告标志
/// </summary>
public bool IsNew { get; set; }
//是否置顶
public string OverheadStr { get; set; }
}
接下来根据公告id查询出公告的信息、查询轮播图信息、加载公告内容、读取附件信息。把这些信息都写在try catch里面,最后再用return返回。
根据公告id查询出公告的信息就不放上来了。
下面是查询轮播图信息。
List<PW_NoticeCarousel> pwNoticeCarousels = (from tbNoticeCarousel in myModel.PW_NoticeCarousel
where tbNoticeCarousel.NoticeID == NoticeID
select tbNoticeCarousel).ToList();
if (pwNoticeCarousels.Count > 0)
{
notice.noticeCarousel = true;//轮播为true
notice.NoticeCarouselImage = pwNoticeCarousels[0].NoticeCarousel;//公告轮播的图片地址
}
加载公告内容,需要判断文件是否存在。
string textFileName = Server.MapPath("~/Document/Notice/Text/") + notice.NoticeContent;
if (System.IO.File.Exists(textFileName))
{
//文件存在
notice.NoticeContent = System.IO.File.ReadAllText(textFileName);
}
else
{
//文件不存在
notice.NoticeContent = "<p>没有找到公告内容,可能文件已经丢失;请重新编辑发布</p>";
}
读取附件信息。也需要联表查询附件信息(这里不写出来啦),再通过for 循环遍历附件到filesvo里面,在for循环里面创建对象。然后通过正则表达式获取文件名称,匹配文件名。然后下面写两个session,将附件信息保存到session,一个用来数据库提取数据,另一个用来记录原来的附件。
for (int i = 0; i < sessionFiles.Count; i++)
{
//通过正则表达式获取文件名称
string strFileName = Regex.Match(sessionFiles[i].Files, "(?<=fileName=).+?(?=\")").Value;
sessionFiles[i].FileName = strFileName;
sessionFiles[i].FileGuid = Guid.NewGuid().ToString("N");
}
List<FilesVo> oldSessionFiles = new List<FilesVo>();
foreach (FilesVo file in sessionFiles)
{
oldSessionFiles.Add(file);
}
//数据库提取数据 1 3 4
Session["sessionFiles"] = sessionFiles;
//记录原来的附件 1 2
Session["oldSessionFiles"] = oldSessionFiles;