博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
阅读量:7171 次
发布时间:2019-06-29

本文共 8348 字,大约阅读时间需要 27 分钟。

上次把咨询的架构搭好了,现在分两次来完成咨询:1、用户部分,2管理部分。这次实现用户部分,包含两个功能,查看我的咨询和进行咨询。

目录:

 

一、菜单

打开上次添加的ConsultationController控制器,添加Menu action,返回分布视图

///         /// 菜单        ///         /// 
public ActionResult Menu() { return PartialView(); }

右键添视图

再打开Home/menu视图

添加分布视图引用

运行一下,在留言器中看下/Member/Home。效果如。

 

二、我的咨询

我的咨询部分用datagrid显示自己的咨询列表,datagrid使用详细视图功能,点开折叠可以看到详细内容。

效果是这样,折叠时:

点开后

这是datagrid的扩展功能,先要去官网下载,然后把里面的jquery.easyui.datagrid.detailview.js文件放到项目/Scripts文件夹下。

 

打开ConsultationController控制器,添加MyJsonList方法,返回我的咨询的json列表

public JsonResult MyJsonList(int pageIndex = 1, int pageSize = 20)        {            int _total;            var _list = commonModelService.FindPageList(out _total, pageIndex, pageSize, "Consultation", string.Empty, 0, User.Identity.Name, null, null, 0).ToList().Select(                cm => new Ninesky.Web.Models.CommonModelViewModel()                {                    CategoryID = cm.CategoryID,                    CategoryName = cm.Category.Name,                    DefaultPicUrl = cm.DefaultPicUrl,                    Hits = cm.Hits,                    Inputer = cm.Inputer,                    Model = cm.Model,                    ModelID = cm.ModelID,                    ReleaseDate = cm.ReleaseDate,                    Status = cm.Status,                    Title = cm.Title                });            return Json(new { total = _total, rows = _list.ToList() });        }

再次添加MyList方法,直接返回视图

///         /// 我的咨询        ///         /// 
public ActionResult MyList() { return View(); }

右键为MyList添加视图。

@{    ViewBag.Title = "我的咨询";}

这段代码比较长,解释一下:

这是datagrid的主题和工具栏。

 

引用~/Scripts/Common.js 是因为里面包含日期格式化方法,json传过来的日期必须格式化后才能正常显示。

引用~/Scripts/jquery.easyui.datagrid.detailview.js 是datagrid像是视图必须的。

这个是初始化datagrid。其中1是使用Common.js中的jsonDateFormater方法格式化日期。2、就是详细视图部分

view: detailview,

        detailFormatter: function (rowIndex, rowData) { return '<div class="detail" style="padding:5px 0"></div>'; }

这两句使用详细视图,并为详细视图添加一个<DIV>

onExpandRow: function (index, row) {

            var detail = $(this).datagrid('getRowDetail', index).find('div.detail');
            detail.panel({
                height: 160,
                border: false,
                cache: false,
                href: '@Url.Content("~/Member/Consultation/Index")/' + row.ModelID,
                onLoad: function () {
                    $('#Consultation_List').datagrid('fixDetailRowHeight', index);
                }
            });

这段是在行展开时为详细视图的div链接到~/Member/Consultation/Index/id视图

 

下面来添加Consultation/Index这个分布视图

在控制器中添加Index action 并返回分布视图

public ActionResult Index(int id)        {            return PartialView(commonModelService.Find(id).Consultation);        }

右键添加强类型(Consultation)分布视图

@model Ninesky.Models.Consultation
@Html.DisplayNameFor(model => model.Name) @Html.DisplayFor(model => model.Name) @Html.DisplayNameFor(model => model.IsPublic) @Html.DisplayFor(model => model.IsPublic)
@Html.DisplayNameFor(model => model.QQ) @Html.DisplayFor(model => model.QQ) @Html.DisplayNameFor(model => model.Email) @Html.DisplayFor(model => model.Email)
@Html.DisplayNameFor(model => model.Content) @Html.DisplayFor(model => model.Content)
@if (Model.ReplyTime != null) { 管理员于:@Model.ReplyTime 回复如下

@Model.ReplyContent

}

完工

 

三、进行咨询

在Consultation控制器添加 Add  action

///         /// 添加        ///         /// 
public ActionResult Add() { InterfaceUserService _userService = new UserService(); var _user = _userService.Find(User.Identity.Name); CommonModel _cModel = new CommonModel(); _cModel.Consultation = new Consultation() { Email = _user.Email, IsPublic = true, Name = _user.DisplayName }; _user = null; _userService = null; return View(_cModel); }

在action中先查询用户信息,构造一个CommonModel并传给视图

右键添加视图

@model Ninesky.Models.CommonModel@{    ViewBag.Title = "进行咨询";}@using (Html.BeginForm()){    @Html.AntiForgeryToken()    

进行咨询


@Html.ValidationSummary(true)
@Html.ValidationMessageFor(model => model.CategoryID)
@Html.LabelFor(model => model.Title, new { @class = "control-label col-sm-2" })
@Html.TextBoxFor(model => model.Title, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Title)
@Html.LabelFor(model => model.Consultation.Name, new { @class = "control-label col-sm-2" })
@Html.TextBoxFor(model => model.Consultation.Name, new { @class = "form-control", @readonly = "readonly" }) @Html.ValidationMessageFor(model => model.Consultation.Name)
@Html.LabelFor(model => model.Consultation.QQ, new { @class = "control-label col-sm-2" })
@Html.TextBoxFor(model => model.Consultation.QQ, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Consultation.QQ)
@Html.LabelFor(model => model.Consultation.IsPublic, new { @class = "control-label col-sm-2" })
@Html.RadioButtonFor(model => model.Consultation.IsPublic,true) 公开 @Html.RadioButtonFor(model => model.Consultation.IsPublic, false) 仅自己查看 @Html.ValidationMessageFor(model => model.Consultation.IsPublic)
@Html.LabelFor(model => model.Consultation.Email, new { @class = "control-label col-sm-2" })
@Html.TextBoxFor(model => model.Consultation.Email, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Consultation.Email)
@Html.LabelFor(model => model.Consultation.Content, new { @class = "control-label col-sm-2" })
@Html.TextAreaFor(model => model.Consultation.Content, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Consultation.Content)
}

与添加文章非常类似,下面写接受方法

再次在控制器中添加Add action

[HttpPost]        [ValidateAntiForgeryToken]        public ActionResult Add(CommonModel commonModel)        {            if(ModelState.IsValid)            {                InterfaceUserService _userService = new UserService();                var _user = _userService.Find(User.Identity.Name);                if (commonModel.Article != null) commonModel.Article = null;                if (commonModel.Attachment != null) commonModel.Attachment = null;                if (commonModel.DefaultPicUrl != null) commonModel.DefaultPicUrl = null;                commonModel.Hits = 0;                commonModel.Inputer = User.Identity.Name;                commonModel.Model = "Consultation";                commonModel.ReleaseDate = System.DateTime.Now;                commonModel.Status = 20;                commonModel.Consultation.Name = _user.DisplayName;                _user = null;                _userService = null;                commonModel = commonModelService.Add(commonModel);                if (commonModel.ModelID > 0) return View("AddSucess", commonModel);            }            return View(commonModel);        }

在action中如果验证通过,先查找用户,并将Article、Attachment设为null,这是防止用户偷偷夹带私货。然后初始化commonModel的Hits、Inputer等字段并保存。

效果:

 

四、总结

我的咨询实现了查看我的咨询和进行咨询两个功能,查看使用了datagrid的详细视图。

转载地址:http://crfzm.baihongyu.com/

你可能感兴趣的文章
myeclipse 10 在mac retina 屏幕下显示字体模糊解决方法
查看>>
创建自定义的指令
查看>>
javascript对象中判断属性
查看>>
git删除分支与合并分支
查看>>
Python元组
查看>>
HD TUNE以及所有其他硬盘检测工具都不能使用的情况
查看>>
Linux内存分析
查看>>
vSphere 5.5 vCenter迁移至分布式交换机
查看>>
排序 遍历
查看>>
第二次作业
查看>>
Mysql主从复制
查看>>
高斯消元法解非奇异线性方程组的MATLAB程序
查看>>
configure:error: Package requirements (libffi >= 3.0.0) were not met
查看>>
java 抽象类与接口的区别
查看>>
Linux驱动模块编译模板
查看>>
我的友情链接
查看>>
MySQL 5.6.12 安装
查看>>
MCSA&MCP认证证书
查看>>
我的友情链接
查看>>
进阶篇第五期:UIScrollView的那点事儿
查看>>