Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3fb8089

Browse files
committed
Add Node
add node and update
1 parent 68c6373 commit 3fb8089

File tree

14 files changed

+465
-28
lines changed

14 files changed

+465
-28
lines changed

‎src/NetCoreBBS/Areas/Admin/Controllers/NodeController.cs‎

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,44 @@
44
using System.Threading.Tasks;
55
using Microsoft.AspNetCore.Http;
66
using Microsoft.AspNetCore.Mvc;
7+
using NetCoreBBS.Models;
8+
using Microsoft.AspNetCore.Authorization;
9+
710
namespace NetCoreBBS.Areas.Admin.Controllers
811
{
12+
[Area("Admin")]
13+
[Authorize("Admin")]
914
public class NodeController : Controller
1015
{
16+
private DataContext _context;
17+
public NodeController(DataContext context)
18+
{
19+
_context = context;
20+
}
1121
// GET: Node
1222
public ActionResult Index()
1323
{
14-
return View();
24+
var nodes = _context.TopicNodes.ToList();
25+
return View(nodes);
1526
}
1627

1728
// GET: Node/Create
18-
public ActionResult Create()
29+
public ActionResult Create(intparentid)
1930
{
31+
ViewBag.ParentId = parentid;
2032
return View();
2133
}
2234

2335
// POST: Node/Create
2436
[HttpPost]
2537
[ValidateAntiForgeryToken]
26-
public ActionResult Create(IFormCollectioncollection)
38+
public ActionResult Create(TopicNodenode)
2739
{
2840
try
2941
{
30-
// TODO: Add insert logic here
31-
42+
node.CreateOn = DateTime.Now;
43+
_context.Add(node);
44+
_context.SaveChanges();
3245
return RedirectToAction("Index");
3346
}
3447
catch
@@ -63,7 +76,16 @@ public ActionResult Edit(int id, IFormCollection collection)
6376
// GET: Node/Delete/5
6477
public ActionResult Delete(int id)
6578
{
66-
return View();
79+
var topicnode = _context.TopicNodes.SingleOrDefault(m => m.Id == id);
80+
if (topicnode == null)
81+
{
82+
return NotFound();
83+
}
84+
var childnodes = _context.TopicNodes.Any(r => r.ParentId == id);
85+
if (childnodes) return Content(" ×ばつÓ1⁄2Úμã");
86+
_context.TopicNodes.Remove(topicnode);
87+
_context.SaveChanges();
88+
return RedirectToAction("Index");
6789
}
6890
}
6991
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
@model NetCoreBBS.Models.TopicNode
2+
3+
@{
4+
ViewData["Title"] = "新增节点";
5+
Layout = "~/Views/Shared/_AdminLayout.cshtml";
6+
}
7+
8+
<h2>新增节点</h2>
9+
10+
<form asp-action="Create">
11+
<div class="form-horizontal">
12+
<h4>主题节点</h4>
13+
<hr />
14+
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
15+
<div class="form-group">
16+
<label asp-for="Name" class="col-md-2 control-label"></label>
17+
<div class="col-md-10">
18+
<input asp-for="Name" class="form-control" />
19+
<span asp-validation-for="Name" class="text-danger" />
20+
</div>
21+
</div>
22+
<div class="form-group">
23+
<label class="col-md-2 control-label">节点别名</label>
24+
<div class="col-md-10">
25+
<input asp-for="NodeName" class="form-control" />
26+
<span asp-validation-for="NodeName" class="text-danger" />
27+
</div>
28+
</div>
29+
<div class="form-group">
30+
<label asp-for="Order" class="col-md-2 control-label"></label>
31+
<div class="col-md-10">
32+
<input asp-for="Order" class="form-control" value="0" />
33+
<span asp-validation-for="Order" class="text-danger" />
34+
</div>
35+
</div>
36+
<div class="form-group">
37+
<label asp-for="ParentId" class="col-md-2 control-label"></label>
38+
<div class="col-md-10">
39+
<input asp-for="ParentId" class="form-control" readonly="readonly" value="@ViewBag.ParentId"/>
40+
<span asp-validation-for="ParentId" class="text-danger" />
41+
</div>
42+
</div>
43+
<div class="form-group">
44+
<label asp-for="Description" class="col-md-2 control-label"></label>
45+
<div class="col-md-10">
46+
<input asp-for="Description" class="form-control" />
47+
<span asp-validation-for="Description" class="text-danger" />
48+
</div>
49+
</div>
50+
<div class="form-group">
51+
<div class="col-md-offset-2 col-md-10">
52+
<input type="submit" value="新增" class="btn btn-default" />
53+
</div>
54+
</div>
55+
</div>
56+
</form>
57+
58+
<div>
59+
<a asp-action="Index">Back to List</a>
60+
</div>
61+
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
@model NetCoreBBS.Models.TopicNode
2+
3+
@{
4+
ViewData["Title"] = "Edit";
5+
Layout = "~/Views/Shared/_AdminLayout.cshtml";
6+
}
7+
8+
<h2>Edit</h2>
9+
10+
<form asp-action="Edit">
11+
<div class="form-horizontal">
12+
<h4>TopicNode</h4>
13+
<hr />
14+
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
15+
<input type="hidden" asp-for="Id" />
16+
<div class="form-group">
17+
<label asp-for="CreateOn" class="col-md-2 control-label"></label>
18+
<div class="col-md-10">
19+
<input asp-for="CreateOn" class="form-control" />
20+
<span asp-validation-for="CreateOn" class="text-danger" />
21+
</div>
22+
</div>
23+
<div class="form-group">
24+
<label asp-for="Description" class="col-md-2 control-label"></label>
25+
<div class="col-md-10">
26+
<input asp-for="Description" class="form-control" />
27+
<span asp-validation-for="Description" class="text-danger" />
28+
</div>
29+
</div>
30+
<div class="form-group">
31+
<label asp-for="Name" class="col-md-2 control-label"></label>
32+
<div class="col-md-10">
33+
<input asp-for="Name" class="form-control" />
34+
<span asp-validation-for="Name" class="text-danger" />
35+
</div>
36+
</div>
37+
<div class="form-group">
38+
<label asp-for="NodeName" class="col-md-2 control-label"></label>
39+
<div class="col-md-10">
40+
<input asp-for="NodeName" class="form-control" />
41+
<span asp-validation-for="NodeName" class="text-danger" />
42+
</div>
43+
</div>
44+
<div class="form-group">
45+
<label asp-for="Order" class="col-md-2 control-label"></label>
46+
<div class="col-md-10">
47+
<input asp-for="Order" class="form-control" />
48+
<span asp-validation-for="Order" class="text-danger" />
49+
</div>
50+
</div>
51+
<div class="form-group">
52+
<label asp-for="ParentId" class="col-md-2 control-label"></label>
53+
<div class="col-md-10">
54+
<input asp-for="ParentId" class="form-control" />
55+
<span asp-validation-for="ParentId" class="text-danger" />
56+
</div>
57+
</div>
58+
<div class="form-group">
59+
<div class="col-md-offset-2 col-md-10">
60+
<input type="submit" value="Save" class="btn btn-default" />
61+
</div>
62+
</div>
63+
</div>
64+
</form>
65+
66+
<div>
67+
<a asp-action="Index">Back to List</a>
68+
</div>
69+
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
@model IEnumerable<NetCoreBBS.Models.TopicNode>
2+
3+
@{
4+
ViewData["Title"] = "节点管理";
5+
Layout = "~/Views/Shared/_AdminLayout.cshtml";
6+
}
7+
8+
<h2>节点管理</h2>
9+
10+
<p>
11+
<a asp-action="Create" asp-route-parentid="0">新增父节点</a>
12+
</p>
13+
<table class="table">
14+
<thead>
15+
<tr>
16+
<th>
17+
名称
18+
</th>
19+
<th>
20+
节点别名
21+
</th>
22+
<th>
23+
排序
24+
</th>
25+
<th>
26+
父节点
27+
</th>
28+
<th>
29+
描述
30+
</th>
31+
<th>
32+
创建时间
33+
</th>
34+
<th></th>
35+
</tr>
36+
</thead>
37+
<tbody>
38+
@foreach (var item in Model.Where(r=>r.ParentId==0).OrderBy(r => r.Order)) {
39+
<tr>
40+
<td>
41+
@Html.DisplayFor(modelItem => item.Name)
42+
</td>
43+
<td>
44+
@Html.DisplayFor(modelItem => item.NodeName)
45+
</td>
46+
<td>
47+
@Html.DisplayFor(modelItem => item.Order)
48+
</td>
49+
<td>
50+
@Html.DisplayFor(modelItem => item.ParentId)
51+
</td>
52+
<td>
53+
@Html.DisplayFor(modelItem => item.Description)
54+
</td>
55+
<td>
56+
@Html.DisplayFor(modelItem => item.CreateOn)
57+
</td>
58+
<td>
59+
<a asp-action="Create" asp-route-parentid="@item.Id">新增子节点</a>|
60+
<a asp-action="Edit" asp-route-id="@item.Id">编辑</a> |
61+
<a asp-action="Delete" asp-route-id="@item.Id">删除</a>
62+
</td>
63+
</tr>
64+
foreach (var node in Model.Where(r => r.ParentId == item.Id).OrderBy(r => r.Order))
65+
{
66+
<tr>
67+
<td>
68+
-->@Html.DisplayFor(modelItem => node.Name)
69+
</td>
70+
<td>
71+
@Html.DisplayFor(modelItem => node.NodeName)
72+
</td>
73+
<td>
74+
@Html.DisplayFor(modelItem => node.Order)
75+
</td>
76+
<td>
77+
@Html.DisplayFor(modelItem => node.ParentId)
78+
</td>
79+
<td>
80+
@Html.DisplayFor(modelItem => node.Description)
81+
</td>
82+
<td>
83+
@Html.DisplayFor(modelItem => node.CreateOn)
84+
</td>
85+
<td>
86+
<a asp-action="Edit" asp-route-id="@node.Id">编辑</a> |
87+
<a asp-action="Delete" asp-route-id="@node.Id">删除</a>
88+
</td>
89+
</tr>
90+
}
91+
}
92+
</tbody>
93+
</table>

‎src/NetCoreBBS/Controllers/HomeController.cs‎

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using NetCoreBBS.Models;
55
using Microsoft.AspNetCore.Identity;
66
using System.Threading.Tasks;
7+
using NetCoreBBS.ViewModels;
8+
using Microsoft.AspNetCore.Mvc.Rendering;
79

810
namespace NetCoreBBS.Controllers
911
{
@@ -12,7 +14,7 @@ public class HomeController : Controller
1214
private DataContext _context;
1315
public UserManager<User> UserManager { get; }
1416

15-
public HomeController(DataContext context,UserManager<User> userManager)
17+
public HomeController(DataContext context,UserManager<User> userManager)
1618
{
1719
_context = context;
1820
UserManager = userManager;
@@ -26,15 +28,39 @@ public IActionResult Index([FromServices]IUserServices user)
2628
pageindex = Convert.ToInt32(Request.Query["page"]);
2729
if (!string.IsNullOrEmpty(Request.Query["s"]))
2830
topics = topics.Where(r => r.Title.Contains(Request.Query["s"]));
29-
var count= topics.Count();
31+
var count = topics.Count();
32+
//var q = from t in topics
33+
// join n in _context.TopicNodes on t.NodeId equals n.Id into tn
34+
// from n2 in tn.DefaultIfEmpty()
35+
// select t;
3036
ViewBag.Topics = topics
37+
.GroupJoin(_context.TopicNodes,
38+
r => r.NodeId,
39+
n => n.Id,
40+
(r, n) => new { r = r, n = n })
41+
.SelectMany(result => result.n.DefaultIfEmpty(), (r, n) => new TopicViewModel
42+
{
43+
Id = r.r.Id,
44+
NodeId = r.r.NodeId,
45+
NodeName = n == null ? "" : n.Name,
46+
Email = r.r.Email,
47+
Title = r.r.Title,
48+
Top = r.r.Top,
49+
Good = r.r.Good,
50+
ReplyCount = r.r.ReplyCount,
51+
LastReplyTime = r.r.LastReplyTime,
52+
CreateOn = r.r.CreateOn
53+
})
3154
.OrderByDescending(r => r.CreateOn)
32-
.OrderByDescending(r => r.Top)
33-
.Skip(pagesize*(pageindex-1))
55+
.OrderByDescending(r => r.Top)
56+
.Skip(pagesize*(pageindex-1))
3457
.Take(pagesize).ToList();
3558
ViewBag.PageIndex = pageindex;
3659
ViewBag.PageCount = count % pagesize == 0 ? count / pagesize : count / pagesize + 1;
3760
ViewBag.User = user.User.Result;
61+
var nodes= _context.TopicNodes.ToList();
62+
ViewBag.Nodes = nodes;
63+
ViewBag.NodeListItem = nodes.Where(r => r.ParentId != 0).Select(r => new SelectListItem { Value = r.Id.ToString(), Text = r.Name });
3864
return View();
3965
}
4066

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /