ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

news/2024/5/20 14:16:42/文章来源:https://blog.csdn.net/weixin_34109408/article/details/85615962

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

目录:

ASP.NET MVC5 网站开发实践 - 概述

ASP.NET MVC5 网站开发实践(一) - 项目框架

ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

ASP.NET MVC5 网站开发实践(二) - 用户部分(1)用户注册

ASP.NET MVC5 网站开发实践(二) - 用户部分(2)用户登录、注销

ASP.NET MVC5 网站开发实践(二) - 用户部分(3)修改资料、修改密码

ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

 

一、菜单

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

/// <summary>/// 菜单/// </summary>/// <returns></returns>public ActionResult Menu(){return PartialView();}

右键添视图

<div class="easyui-accordion"><div title="咨询管理"><ul id="navmenu" class="nav nav-pills nav-stacked"><li> <a href="javascript:void()" data-options="'icons':'icon-folder-page','title': '咨询管理', 'href': '@Url.Action("ManageList", "Consultation")'"><span class="glyphicon glyphicon-list"> 咨询管理</span></a></li><li> <a href="javascript:void()" data-options="'icons':'icon-folder-user','title': '我的咨询', 'href': '@Url.Action("MyList", "Consultation")'"><span class="glyphicon glyphicon-list-alt"> 我的咨询</span></a></li></ul></div>
</div>

再打开Home/menu视图

image

添加分布视图引用

image

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

image

 

二、我的咨询

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

效果是这样,折叠时:

image

点开后

image

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

image

 

打开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方法,直接返回视图

/// <summary>/// 我的咨询/// </summary>/// <returns></returns>public ActionResult MyList(){return View();}

右键为MyList添加视图。

@{ViewBag.Title = "我的咨询";
}<div id="toolbar"><div><a href="#" id="btn_add" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true">进行咨询</a><a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-reload',plain:true" onclick="$('#Consultation_List').datagrid('reload');">刷新</a></div>
</div><table id="Consultation_List"></table><script src="~/Scripts/Common.js"></script>
<script src="~/Scripts/jquery.easyui.datagrid.detailview.js"></script>
<script type="text/javascript">$("#Consultation_List").datagrid({loadMsg: '加载中……',fitColumns:true,pagination: true,singleSelect: true,url: '@Url.Action("MyJsonList", "Consultation")',columns: [[{ field: 'ModelID', title: 'ID' },{ field: 'Title', title: '标题'},{ field: 'Inputer', title: '咨询人', align: 'right' },{ field: 'ReleaseDate', title: '咨询日期', align: 'right', formatter: function (value, row, index) { return jsonDateFormat(value); } },{ field: 'StatusString', title: '状态', width: 100, align: 'right' }]],toolbar: '#toolbar',idField: 'ModelID',view: detailview,detailFormatter: function (rowIndex, rowData) { return '<div class="detail" style="padding:5px 0"></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);}});$('#Consultation_List').datagrid('fixDetailRowHeight', index);}});//添加按钮
    $("#btn_add").click(function () {window.parent.addTab("进行咨询", "@Url.Action("Add", "Consultation")", "icon-page");});
</script>

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

<div id="toolbar"><div><a href="#" id="btn_add" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true">进行咨询</a><a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-reload',plain:true" onclick="$('#Consultation_List').datagrid('reload');">刷新</a></div>
</div><table id="Consultation_List"></table>

这是datagrid的主题和工具栏。

 

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

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

这个是初始化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<table style="width:100%"><tr><th>@Html.DisplayNameFor(model => model.Name)</th><td>@Html.DisplayFor(model => model.Name)</td><th>@Html.DisplayNameFor(model => model.IsPublic)</th><td>@Html.DisplayFor(model => model.IsPublic)</td></tr><tr><th>@Html.DisplayNameFor(model => model.QQ)</th><td>@Html.DisplayFor(model => model.QQ)</td><th>@Html.DisplayNameFor(model => model.Email)</th><td>@Html.DisplayFor(model => model.Email)</td></tr><tr><th>@Html.DisplayNameFor(model => model.Content)</th><td colspan="3">@Html.DisplayFor(model => model.Content)</td></tr><tr><td colspan="4">@if (Model.ReplyTime != null){<span>管理员于:@Model.ReplyTime 回复如下</span><p style="margin-top:8px">@Model.ReplyContent</p>}</td></tr>
</table>

完工

 

三、进行咨询

在Consultation控制器添加 Add  action

/// <summary>/// 添加/// </summary>/// <returns></returns>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()<h4>进行咨询</h4><hr /><div class="form-horizontal">@Html.ValidationSummary(true)<div class="form-group"><label class = "control-label col-sm-2" >类型</label><div class="col-sm-10"><input id="CategoryID" name="CategoryID" data-options="url:'@Url.Action("JsonComboBox", "Category", new { model = "Consultation" })',valueField:'CategoryID',textField:'Name'" class="easyui-combobox" style="height: 34px; width: 280px;" />@Html.ValidationMessageFor(model => model.CategoryID)</div></div><div class="form-group">@Html.LabelFor(model => model.Title, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.TextBoxFor(model => model.Title, new { @class = "form-control" })@Html.ValidationMessageFor(model => model.Title)</div></div><div class="form-group">@Html.LabelFor(model => model.Consultation.Name, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.TextBoxFor(model => model.Consultation.Name, new { @class = "form-control", @readonly = "readonly" })@Html.ValidationMessageFor(model => model.Consultation.Name)</div></div><div class="form-group">@Html.LabelFor(model => model.Consultation.QQ, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.TextBoxFor(model => model.Consultation.QQ, new { @class = "form-control" })@Html.ValidationMessageFor(model => model.Consultation.QQ)</div></div><div class="form-group">@Html.LabelFor(model => model.Consultation.IsPublic, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.RadioButtonFor(model => model.Consultation.IsPublic,true) 公开@Html.RadioButtonFor(model => model.Consultation.IsPublic, false) 仅自己查看@Html.ValidationMessageFor(model => model.Consultation.IsPublic)</div></div><div class="form-group">@Html.LabelFor(model => model.Consultation.Email, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.TextBoxFor(model => model.Consultation.Email, new { @class = "form-control" })@Html.ValidationMessageFor(model => model.Consultation.Email)</div></div><div class="form-group">@Html.LabelFor(model => model.Consultation.Content, new { @class = "control-label col-sm-2" })<div class="col-sm-10">@Html.TextAreaFor(model => model.Consultation.Content, new { @class = "form-control" })@Html.ValidationMessageFor(model => model.Consultation.Content)</div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" value="提交" class="btn btn-default" /></div></div></div>
}

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

再次在控制器中添加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等字段并保存。

效果:

image

image

 

四、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_765723.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA推荐网站

为什么80%的码农都做不了架构师&#xff1f;>>> 语言&#xff1a;中文简介&#xff1a;CSDN 个人最喜欢的网站 http://www.csdn.net/ 语言&#xff1a;中文简介&#xff1a;Java Eye http://www.javaeye.com/ 语言&#xff1a;中文简介&#xff1a;Java中文网站 ht…

关于网站分页

今天写代码遇到写一个分页&#xff0c;而以前写的分页自己又不太满意&#xff0c;就重新写了一个。 效果如图&#xff1a; 写完后&#xff0c;感觉代码太多&#xff0c;不太完善&#xff0c;不过功能实现了 <?phpswitch ($page){case 1:echo <div class"movie_page…

Windows系统服务器(网站)安全注意事项

2019独角兽企业重金招聘Python工程师标准>>> 年未了&#xff0c;网络安全越发显得重要&#xff0c;最近黑客攻击事件是越来越多了&#xff0c;对于站长来说有时简直就是个恶梦。 这里我针对自己做站的一些安全经验&#xff0c;跟大家一起分享&#xff0c;也许我说的…

IIS 发布网站

1、添加网站 2、物理路径指向web项目根目录 3、添加默认文档 以下引用百度 确保系统上已经安装IIS&#xff0c;如果没有安装 请到【控制面板】→【程序】→【程序和功能】→【打开或关闭Windows功能】 选中Internet 信息服务下面的所有选项&#xff0c;确定 步骤阅读 2获得发布…

网站URL路径的中文问题[中文路径编码]【转】

原文地址&#xff1a;http://hi.baidu.com/iqpkeq/item/63eeb1136469d1a4ffded536 网站URL路径的中文问题 [中文路径编码] 导读&#xff1a;网站URL路径一般都是用英文来表述&#xff0c;不过在国内很多情况下能看到网页URL中使用中文&#xff0c;因此中文的编码就会成为网站路…

网站计数的实现jsp

在一些博客或论坛里经常出现一些访问次数的字样&#xff0c;这就是通常说的网站计数器。进行网站计数器开发需要注意以下3个问题&#xff1a;1、网站的来访人数很多&#xff0c;所以必须用大整数来表示&#xff1b;2、每个用户在第一次访问时需要计数&#xff0c;重复刷新页面不…

服务器日志法网站分析的原理及优缺点

网站分析收集数据的方式其实有五、六种之多&#xff0c;我们最常见的有三种&#xff0c;分别是&#xff1a;服务器日 志&#xff08;Server Log&#xff09;、页面标记&#xff08;Page Tag&#xff09;和客户端监测软件收集&#xff08;Client End/Desktop&#xff09;。我的C…

python爬虫: 爬一个英语学习网站

爬虫的基本概念 关于爬虫的基本概念, 推荐博客https://xlzd.me/ 里面关于爬虫的介绍非常通俗易懂. 简单地说,在我们输入网址后到可以浏览网页,中间浏览器做了很多工作, 这里面涉及到两个概念&#xff1a; IP地址&#xff1a; IP地址是你在网络上的地址&#xff0c;大部分情况下…

网站建设前期,我们因考虑的优化因素

1.网站建设前期的重要性和关键点网站前期的建设和seo优化一定有精密的相连&#xff0c;一个新网站从你一上线后就能看出你的网站是否能走得更远&#xff0c;很多人在做站的时候都不会去考虑这个因素&#xff0c;所以往往网站上市后优化了1个月左右的时候基本就没信心了。被百度…

【已解决】PHP项目需求:在现有网站中每个页面增加一个get参数

2019独角兽企业重金招聘Python工程师标准>>> 需求&#xff1a;在这个现有的网站之中每个页面增加一个get参数&#xff0c;保证用户分享出去链接均有推广用户id。 想法一&#xff1a;给类似tp框架之中U函数&#xff08;构造URL链接函数&#xff09;增加一个get参数&a…

[转]10个学习Android开发的网站推荐

本文转自&#xff1a;http://blog.csdn.net/i_lovefish/article/details/43950893 1. Android Developers 作为一个Android开发者&#xff0c;官网的资料当然不可错过&#xff0c;从设计&#xff0c;培训&#xff0c;指南&#xff0c;文档&#xff0c;都不应该错过&#xff0c;…

使用js检测用户是否在用微信浏览器浏览网站

现在大部分的公司喜欢把自己发布的网址转成二维码&#xff0c;然后用户只要用手机扫一下就能登录。而大部分的用户都喜欢(可能不知道还有其他扫码工具)用微信来扫二维码&#xff0c;大家都知道微信里面自带的浏览器会屏蔽大部分的外部网站&#xff0c;只能点击右上角图标&#…

【转】大访问量系统的设计(二)——高并发高流量网站架构

【转】大访问量系统的设计&#xff08;二&#xff09;——高并发高流量网站架构 博客分类&#xff1a; 大访问量、高并发应用服务器网络应用lighttpdmemcached互联网 目录 1.网络层架构 1.1 镜像网站技术 1.2 CDN内容分发网络——调整服务器的域名解析来实现 1.3 应用层分布式设…

优秀素材网站

2019独角兽企业重金招聘Python工程师标准>>> 代码质量分析:Sonar仪表盘 http://www.cnblogs.com/topplay/p/3945013.html nginx和apache设置环境变量&#xff0c;配置文件分离 http://yansu.org/2014/05/04/set-environment-variables-of-server-for-php.html 作图&…

大型网站的灵魂——性能

在前一篇随笔 大型网站系统架构的演化中&#xff0c;介绍了大型网站的演化过程&#xff0c;期间穿插了一些技术和手段&#xff0c;我们可以从中看出一个大型网站的轮廓&#xff0c;但想要掌握设计开发维护大型网站的技术&#xff0c;需要我们一步一步去研究实践。所以我打算…

经典黑色--网站管理界面

这是一款用于http://jing-ui.com网站后台管理界面&#xff0c;也可以用于管理系统或其它通用后台界面。有时候我也在思考&#xff0c;一般的用户或者大部分用户他们是否需要像ext,easyui这样成型的界面解决方案&#xff0c;或许他们只是需要一款简洁&#xff0c;方便的一个界面…

[基础常识]阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)

首先如何购买ECS&#xff1f;发现有些人购买5G硬盘&#xff0c;我个人认为买硬盘应该购买20以上&#xff01;这样以后好处理&#xff01; 进入http://www.aliyun.com/product/ecs/?spm5176.7189909.201.2.CVdddr 点击后面后选择配置&#xff0c;你也可以选择镜像市场&#xf…

记录 python 逆向 登录某fang网站

目标网站: 链接:https://passport.fang.com/?backurlhttp%3a%2f%2fmy.fang.com%2fHead%2fLoginOut.do 如图 通过关键字pwd 搜索可查看js的加密方法, 通过分析,并通过 execjs (pip install PyExecJS) 第三方库模拟执行js函数, , 徐创建一个js文件来执行 具体代码如下: i…

怎样尽量扩大网站seo优化的效果

在我们深入seo的过程当中&#xff0c;seoer之间的竞争越发激烈&#xff0c;seo的目标也变得越发遥远&#xff0c;如何从seo的竞争中脱颖而出&#xff0c;考验的不仅仅是seoer的技术能力&#xff0c;还有对优化工作的长远发展和前景考虑。由于seo跟随搜索引擎发展的延续性&#…

ECSHOP商城网站建设之自定义调用广告方法(二)

原文地址&#xff1a;http://www.cnblogs.com/zgzy/p/3598991.html 使用ecshop进行商城网站建设时&#xff0c;ecshop默认的很多功能对于我们个性化设计之后不太使用。今天我们主要是来分析如果自定义调用广告位&#xff1a;1.调用单个广告位时我们可以使用&#xff1a;{insert…