环境

  • .NET Core 2.1
  • NuGet 包管理器
  • 开源分页包 Sakura.AspNetCore.Mvc.PageList Sakura.AspNetCore.PagedList

参考

安装

  1. NuGet中安装上述两个包(只安装一个无法使用)。
  2. 编辑Startup.cs的ConfigureServices方法。
    • 添加默认的bootstrap式的分页实现(原文:“Add default bootstrap-styled pager implementation”)
      public void ConfigureServices(IServiceCollection services)
      {
        // .. Other configuration codes in you application
       
        // Add default bootstrap-styled pager implementation
        services.AddBootstrapPagerGenerator(options =>
        {
          // Use default pager options.
          options.ConfigureDefault();
         });
      }
  3. 编辑_ViewImports.cs,加入以下代码,对所有视图应用pager标签。
    @addTagHelper *, Sakura.AspNetCore.Mvc.PagedList

步骤

Continue reading “.NET Core 2.1 MVC 实现 PagedList”

之前用MVC 5时,总是习惯先建字典然后转成SelectList,总有一种脱裤放屁的感觉。(需要引用[Microsoft.AspNetCore.Mvc.Rendering] ,在.NET Core 中没有直接被引用)

今天看了一下文档,官方用法是new 一个 List<SelectListItem>(),SelectListItem也需要[Microsoft.AspNetCore.Mvc.Rendering]

参考

SelectListItem Class

Using the DropDownList Helper with ASP.NET MVC

步骤

  1. 在视图使用DropDownList前,需要先在控制器准备SelectList。
    • new出List<SelectListItem>后,使用Add()方法添加SelectListItem条目
      var departs = db.departmentInfo.Select(x => x);
      
      foreach (var i in departs) {
          Items.Add(new SelectListItem { Text = i.dname, Value = i.dname });
      }
    • 如果想令视图中的DropDownList默认显示某一条目,可以在添加SelectListItem时指定Selected选项为true
      Items.Add(new SelectListItem { Text = i.dname, Value = i.dname, Selected = true });
    • 将SelectList添加入ViewBag,使视图可以调用
  2. 在视图中使用HtmlHelper添加DropDownList。
    //两种都可以,第一种需要将名称设置为ViewBag中的名称
    @Html.DropDownList("DepartList", null, new { @class = "form-control" })
    @Html.DropDownList("Department", ViewBag.DepartList as SelectList, new { @class = "form-control" }

.NET Core中调用Session的方式与传统ASP.NET MVC不同。

参考

Session and app state in ASP.NET Core

步骤

  1. 配置Session。在Startup.cs中启用Session。
    • [Microsoft.AspNetCore.Session] 提供了管理Session的中间件,此包包含在 [Microsoft.AspNetCore.App] metapackage中
    • 在Startup.cs的ConfigureServices()方法中加入代码,启用Session
      services.AddDistributedMemoryCache();
      
      services.AddSession(options =>
      {
          // Set a short timeout for easy testing.
          options.IdleTimeout = TimeSpan.FromSeconds(10); //设置超时时间
          options.Cookie.HttpOnly = true;
      });
      
      
      app.UseSession();
    • app.UseSession()的位置十分重要,需要写在app.UseMvc()之前,不然会引发InvalidOperationException异常
    • 完成此步骤后,可以通过HttpContext.Session来使用Session
  2. 设置和读取Session。
    • 对Session操作前,需要引入 [Microsoft.AspNetCore.Http]
    • 使用SetString或者SetInt32对Session赋值,使用GetString或GetInt32获取Session的值
      // Requires: using Microsoft.AspNetCore.Http;
      if (string.IsNullOrEmpty(HttpContext.Session.GetString(SessionKeyName)))
      {
          HttpContext.Session.SetString(SessionKeyName, "The Doctor");
          HttpContext.Session.SetInt32(SessionKeyAge, 773);
      }
      
      var name = HttpContext.Session.GetString(SessionKeyName);
      var age = HttpContext.Session.GetInt32(SessionKeyAge);
    • 对于复杂类型的数据,必须用其他工具将其序列化,然后存入Session,例如JSON(原文:Complex types must be serialized by the user using another mechanism, such as JSON.)
  3. 清空Session。
    • 使用Clear()方法清空Session,.NET Core没有Abandon()方法
      HttpContext.Session.Clear();
    • Clear()方法会清空Session,但不会删除Session(StackOverflow原文:This will cause the Session to be empty but not deleted or abandoned.)