mvc5+ef+ adminlte教程17:mvc5 用正则表达式获取字段中的图片地址取出来形成列表
今日头条那样,上面是文章下面是图很好漂亮。
所以我思考半天,准备将CmsContents表再增加一个字段,前台的Ueditor送过去的字段内容,进行处理,将其图片地址用正则表达式取出来存入另一个字段。
然后前台直接LIst<>这个字段进行图片的展示。
下一步还可以考虑将图片生成浓缩图。
1.先增加一个字段。进行first code.
public string Piclist { get; set; }
2.控制器,对model.Contetnts字段进行遍历,对所有的图片地址写入字段piclist,同时用","分隔。
// POST: CmsContents/Create // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 // 详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=317598。 [HttpPost] [ValidateAntiForgeryToken] [ValidateInput(false)] public async Task<ActionResult> Create([Bind(Include = "ColumnId,Title,Contents,CmsPermission")] CmsContent cmsContent, FormCollection form) { var dt = DateTime.Now; string str = dt.ToString("yyyyMMddHHmmss"); cmsContent.Id = str; cmsContent.PcIp = Request.UserHostAddress; cmsContent.CreatUser = Session["username"].ToString(); cmsContent.ReplyCount =0; cmsContent.CreatTime = DateTime.Now; cmsContent.yulou1 = Session["headerPic"].ToString(); var winnars = from x in form.AllKeys ///选择所有的传进来的form //var winnars = from x in form["selectRole"] where form[x] != "false" select x; string Lstring = ""; //foreach (var id in winnars) foreach(var id in winnars) { if (id != "Contents" && id != "ColumnId" && id != "Title" && id != "Id" && id != "ReplyCount" && id != "CreatUser" && !id.Contains("RequestVerificationToken")) { Lstring = Lstring + id + ","; } } cmsContent.CmsPermission = Lstring; ///用正则表达式获取Ueditor中送过来的Contents字段中的图片列表。 Regex m_hvtRegImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); String yyyy = cmsContent.Contents; // 搜索匹配的字符串 MatchCollection matches = m_hvtRegImg.Matches(yyyy); int m_i = 0; string[] sUrlList = new string[matches.Count]; // 取得匹配项列表 foreach (Match match in matches) { sUrlList[m_i++] = match.Groups["imgUrl"].Value; } cmsContent.Piclist = string.Join(",",sUrlList); //END 获取图片地址 if (ModelState.IsValid) { db.CmsContents.Add(cmsContent); await db.SaveChangesAsync(); return RedirectToAction("Admin","User"); } return View(cmsContent); }
3.前台,用Model.PicList进行.split(',')
<table class="table table-hover" style="table-layout:fixed"> <tr> <th width="80%"></th> <th></th> </tr> @foreach (var item in Model) { <tr> <td style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;"> <a href="~/CmsContents/Details?id=@item.Id"> @Html.DisplayFor(modelItem => item.Title)</a> <br /> @{ if (item.Piclist != null) { string[] picList = item.Piclist.Split(','); for (var a = 0; a < picList.Length; a++) { <img src= @picList[a] width="145" height="95" /> } } } </td> <td> @Html.DisplayFor(modelItem => item.CreatTime, "DateTimeTemplate") </td> </tr> } </table>
4.效果。
余下的就是美化了。
先保存一下,再上修改完后的代码。
下面完整的视图
@*@model IEnumerable<jsdhh2.Models.CmsContent>*@ @model PagedList.IPagedList<jsdhh2.Models.CmsContent> @using PagedList.Mvc; <link href="~/Content/PagedList.css" rel="stylesheet" /> @{ ViewBag.Title = "Index"; } <div class="dhhheight1 col-md-12 col-xs-12"></div> <!--start 左 --> <div class="col-md-3"> @using (Html.BeginForm("indexList", "CmsContents", new { @class = "form-inline" }, FormMethod.Post)) { <div class="dhhheight1 col-md-12 col-xs-12">.</div> <div class="form-inline dhhbootom"> <div class="form-group"> <div class="input-group col-md-12"> @Html.TextBox("SearchString", "", new { @class = "form-control", @Style = "display:inline" }) <span class="input-group-btn "> <input id="btnSearch" class="btn btn btn-primary" type="submit" value="搜索"> </span> </div> </div> </div> } . <div class="box box-solid"> <div class="box-header with-border"> <h3 class="box-title">文章中心</h3> <div class="box-tools"> <button type="button" class="btn btn-box-tool" data-widget="collapse"> <i class="fa fa-minus"></i> </button> </div> </div> <div class="box-body no-padding" style="display: block;"> <ul class="nav nav-pills nav-stacked"> @foreach (jsdhh2.Models.CmsColumn data1 in (ViewBag.drolistmenu as IEnumerable<jsdhh2.Models.CmsColumn> )) { <li> <a href="~/CmsContents/IndexList?SeachColumnString=@data1.Id"><i class="fa fa-circle-o"></i> @data1.Name</a> </li> } </ul> </div> <!-- /.box-body --> </div> </div> <!--start 右 --> <div class="col-md-9 col-xs-12 pull-right"> <!-- Content Header (Page header) --> <section class="content-header"> <h1> 文章列表 <small>文章千万篇,我只取三千~</small> </h1> <ol class="breadcrumb"> <li><a href="#"><i class="fa fa-dashboard"></i> Level</a></li> <li class="active">Here</li> </ol> </section> <!--end Content Header (Page header) --> <!-- Main content --> <section class="content"> <table class="table table-hover" style="table-layout:fixed"> <tr> <th width="80%"></th> <th></th> </tr> @foreach (var item in Model) { <tr> <td style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;"> <div class="dhhlisttile"> <a href="~/CmsContents/Details?id=@item.Id"> @Html.DisplayFor(modelItem => item.Title) </a></div> @{ if (item.Piclist != null) { string[] picList = item.Piclist.Split(','); for (var a = 0; a < picList.Length; a++) { <img src= @picList[a] width="145" height="95" style="margin-right:9px;" /> } } } <div style="line-height:30px; color:#c3c2c2;">by @item.CreatUser 于 @Html.DisplayFor(modelItem => item.CreatTime, "DateTimeTemplate")</div> </td> </tr> } </table> <!-- /.box --> <!-- Main content --> Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount @Html.PagedListPager(Model, page => Url.Action("IndexList", new { page, SeachColumnString = ViewBag.SeachColumnString, SearchString = ViewBag.SearchString })) </section> </div> @section Scripts { <script type="text/JavaScript"> function GetImgUrl(imgstr) { var r = /<img[^>]+?src=(/"|/')([^/'/"]+)/1/i; alert(imgstr.match(r)[2]); } </script> }
然后更改了jsdhh.css中的几个CSS
.dhhlisttile { font-size: 24px; line-height: 42px; } .dhhlisttile a{ color:#000000; }
效果