大致要實現的 效果如下

1,添加Controller(用到的X.PagedList 注意到nuget添加)
using System.Web.Mvc;
using Abp.Application.Services.Dto;
using Abp.Runtime.Caching;
using Abp.Threading;
using Abp.Web.Mvc.Authorization;
using AutoMapper;
using LearningMpaAbp.Notifications;
using LearningMpaAbp.Tasks;
using LearningMpaAbp.Tasks.Dtos;
using LearningMpaAbp.Users;
using LearningMpaAbp.Users.Dto;
using LearningMpaAbp.Web.Models.Tasks;
using X.PagedList;
namespace LearningMpaAbp.Web.Controllers
{
[AbpMvcAuthorize]
public class TasksController : LearningMpaAbpControllerBase
{
private readonly ITaskAppService _taskAppService;
private readonly IUserAppService _userAppService;
private readonly INotificationAppService _notificationAppService;
private readonly ICacheManager _cacheManager;
public TasksController(ITaskAppService taskAppService, IUserAppService userAppService, ICacheManager cacheManager, INotificationAppService notificationAppService)
{
_taskAppService = taskAppService;
_userAppService = userAppService;
_cacheManager = cacheManager;
_notificationAppService = notificationAppService;
}
public ActionResult Index(GetTasksInput input)
{
var output = _taskAppService.GetTasks(input);
var model = new IndexViewModel(output.Tasks)
{
SelectedTaskState = input.State
};
return View(model);
}
// GET: Tasks
public ActionResult PagedList(int? page)
{
//每頁行數
var pageSize = 5;
var pageNumber = page ?? 1; //第幾頁
var filter = new GetTasksInput
{
SkipCount = (pageNumber - 1) * pageSize, //忽略個數
MaxResultCount = pageSize
};
var result = _taskAppService.GetPagedTasks(filter);
//已經在應用服務層手動完成了分頁邏輯,所以需手動構造分頁結果
var onePageOfTasks = new StaticPagedList<TaskDto>(result.Items, pageNumber, pageSize, result.TotalCount);
//將分頁結果放入ViewBag供View使用
ViewBag.OnePageOfTasks = onePageOfTasks;
return View();
}
public PartialViewResult GetList(GetTasksInput input)
{
var output = _taskAppService.GetTasks(input);
return PartialView("_List", output.Tasks);
}
/// <summary>
/// 獲取創建任務分部視圖
/// 該方法使用ICacheManager進行緩存,在WebModule中配置緩存過期時間為10mins
/// </summary>
/// <returns></returns>
public PartialViewResult RemoteCreate()
{
//1.1 注釋該段代碼,使用下面緩存的方式
//var userList = _userAppService.GetUsers();
//1.2 同步調用異步解決方案(最新Abp創建的模板項目已經去掉該同步方法,所以可以通過下面這種方式獲取用戶列表)
//var userList = AsyncHelper.RunSync(() => _userAppService.GetUsersAsync());
//1.3 緩存版本
var userList = _cacheManager.GetCache("ControllerCache").Get("AllUsers", () => _userAppService.GetUsers());
//1.4 轉換為泛型版本
//var userList = _cacheManager.GetCache("ControllerCache").AsTyped<string, ListResultDto<UserListDto>>().Get("AllUsers", () => _userAppService.GetUsers());
//1.5 泛型緩存版本
//var userList = _cacheManager.GetCache<string, ListResultDto<UserListDto>>("ControllerCache").Get("AllUsers", () => _userAppService.GetUsers());
ViewBag.AssignedPersonId = new SelectList(userList.Items, "Id", "Name");
return PartialView("_CreateTaskPartial");
}
/// <summary>
/// 獲取創建任務分部視圖(子視圖)
/// 該方法使用[OutputCache]進行緩存,緩存過期時間為2mins
/// </summary>
/// <returns></returns>
[ChildActionOnly]
[OutputCache(Duration = 1200, VaryByParam = "none")]
public PartialViewResult Create()
{
var userList = _userAppService.GetUsers();
ViewBag.AssignedPersonId = new SelectList(userList.Items, "Id", "Name");
return PartialView("_CreateTask");
}
// POST: Tasks/Create
// 為了防止“過多發布”攻擊,請啟用要綁定到的特定屬性,有關
// 詳細信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=317598。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CreateTaskInput task)
{
var id = _taskAppService.CreateTask(task);
var input = new GetTasksInput();
var output = _taskAppService.GetTasks(input);
return PartialView("_List", output.Tasks);
}
// GET: Tasks/Edit/5
public PartialViewResult Edit(int id)
{
var task = _taskAppService.GetTaskById(id);
var updateTaskDto = Mapper.Map<UpdateTaskInput>(task);
var userList = _userAppService.GetUsers();
ViewBag.AssignedPersonId = new SelectList(userList.Items, "Id", "Name", updateTaskDto.AssignedPersonId);
return PartialView("_EditTask", updateTaskDto);
}
// POST: Tasks/Edit/5
// 為了防止“過多發布”攻擊,請啟用要綁定到的特定屬性,有關
// 詳細信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=317598。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(UpdateTaskInput updateTaskDto)
{
_taskAppService.UpdateTask(updateTaskDto);
var input = new GetTasksInput();
var output = _taskAppService.GetTasks(input);
return PartialView("_List", output.Tasks);
}
public ActionResult NotifyUser()
{
_notificationAppService.NotificationUsersWhoHaveOpenTask();
return new EmptyResult();
}
}
}
2,視圖
@using Abp.Web.Mvc.Extensions @model LearningMpaAbp.Web.Models.Tasks.IndexViewModel @{ ViewBag.Title = L("TaskList"); ViewBag.ActiveMenu = "TaskList"; //Matches with the menu name in SimpleTaskAppNavigationProvider to highlight the menu item } @section scripts{ @Html.IncludeScript("~/Views/Tasks/index.js"); } <h2> @L("TaskList") <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#add">Create Task</button> <a class="btn btn-primary" data-toggle="modal" href="@Url.Action("RemoteCreate")" data-target="#modal" role="button">(Create Task)使用Remote方式調用Modal進行展現</a> <a class="btn btn-success" href="@Url.Action("PagedList")" role="button">分頁展示</a> <button type="button" class="btn btn-info" onclick="notifyUser();">通知未完成任務的用戶</button> <!--任務清單按照狀態過濾的下拉框--> <span class="pull-right"> @Html.DropDownListFor( model => model.SelectedTaskState, Model.GetTaskStateSelectListItems(), new { @class = "form-control select2", id = "TaskStateCombobox" }) </span> </h2> <!--任務清單展示--> <div class="row" id="taskList"> @{ Html.RenderPartial("_List", Model.Tasks); } </div> <!--通過初始加載頁面的時候提前將創建任務模態框加載進來--> @Html.Action("Create") <!--編輯任務模態框通過ajax動態填充到此div中--> <div id="edit"> </div> <!--Remote方式彈出創建任務模態框--> <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="createTask" data-backdrop="static"> <div class="modal-dialog" role="document"> <div class="modal-content"> </div> </div> </div>
另外還有_createTaskPartial,_EditTaskPartial 等,這里就不貼代碼了
以上。。。
參考http://www.jianshu.com/p/620c20fa511b
代碼地址https://github.com/tianxiangd/LearnAbp
