1. 程式人生 > >如何在FineUIMvc(ASP.NET MVC)中顯示覆雜的表格列資料(列表和物件)?

如何在FineUIMvc(ASP.NET MVC)中顯示覆雜的表格列資料(列表和物件)?

起源

最初,這個問題是知識星球內的一個網友提出的,如何在FineUIMvc中展現複雜的列資料?

在FineUIPro中,我們都知道有一個 TemplateField 模板列可以使用,我們只需要在後臺定義一個 C# 方法,就可以返回任意想要的資料。

可是在FineUIMvc中沒有這麼個列型別,那又如何展示覆雜資料呢?

解決辦法

先來看下資料模型:

public class Student
{
    [Key]
    public int Id { get; set; }

    [Required]
    [Display(Name = "姓名")]
    [StringLength(
20)] public string Name { get; set; } [Required] [Display(Name = "性別")] public int Gender { get; set; } [Required] [Display(Name = "入學年份")] public int EntranceYear { get; set; } [Required] [Display(Name = "是否在校")] public bool AtSchool { get; set
; } [Required] [Display(Name = "所學專業")] [StringLength(200)] public string Major { get; set; } [Required] [Display(Name = "分組")] public int Group { get; set; } [Display(Name = "註冊日期")] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")] public DateTime? EntranceDate { get
; set; } [Display(Name = "愛好")] public string[] Hobby { get; set; } [Display(Name = "家庭資訊")] public Family Family { get; set; } }

通過一個靜態方法獲取模擬資料:

public class StudentHelper
{
    public static IEnumerable<Student> GetSimpleStudentList()
    {
        var students = new List<Student> { 
            new Student {
                Id= 101,
                Name= "張萍萍",
                Gender= 0,
                EntranceYear= 2000,
                AtSchool= true,
                Major= "材料科學與工程系",
                Group = 1,
                EntranceDate= DateTime.Parse("2000-09-01"),
                Hobby = new string[]{"reading","basketball","travel"},
                Family = new Family {
                    FatherName = "張國棟",
                    MotherName = "李梅"
                }
            },
            new Student {
                Id= 102,
                Name= "陳飛",
                Gender= 1,
                EntranceYear= 2000,
                AtSchool= false,
                Major= "化學系",
                Group = 1,
                EntranceDate= DateTime.Parse("2001-09-01"),
                Hobby = new string[]{"reading","basketball"},
                Family = new Family {
                    FatherName = "陳國樑",
                    MotherName = "周蘭"
                }
            },
            new Student {
                Id= 103,
                Name= "董婷婷",
                Gender= 0,
                EntranceYear= 2000,
                AtSchool= true,
                Major= "化學系",
                Group = 1,
                EntranceDate= DateTime.Parse("2008-09-01"),
                Hobby = new string[]{"reading","basketball","music"},
                Family = new Family {
                    FatherName = "董輔仁",
                    MotherName = "劉靜"
                }
            },
            new Student {
                Id= 104,
                Name= "劉國",
                Gender= 1,
                EntranceYear= 2002,
                AtSchool= false,
                Major= "化學系",
                Group = 2,
                EntranceDate= DateTime.Parse("2002-09-01"),
                Hobby = new string[]{"reading","music"},
                Family = new Family {
                    FatherName = "劉房齡",
                    MotherName = "湘採荷"
                }
            },
            new Student {
                Id= 105,
                Name= "康穎穎",
                Gender= 0,
                EntranceYear= 2008,
                AtSchool= true,
                Major= "數學系",
                Group = 2,
                EntranceDate= DateTime.Parse("2008-09-01"),
                Hobby = new string[]{"travel","movie","music"},
                Family = new Family {
                    FatherName = "康有為",
                    MotherName = "陸小妹"
                }
            }
        };

        return students;
    }

}

檢視定義也很簡單:

@(F.Grid().IsFluid(true).CssClass("blockpanel").Title("表格").ShowHeader(true).ShowBorder(true).ID("Grid1").DataIDField("Id").DataTextField("Name")
        .Columns(
            F.RowNumberField(),
            F.RenderFieldFor(m => m.Name),
            F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),
            F.RenderFieldFor(m => m.EntranceYear),
            F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),
            F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").ExpandUnusedSpace(true),
            F.RenderFieldFor(m => m.Group).RendererFunction("renderGroup").Width(80),
            F.RenderFieldFor(m => m.EntranceDate)
        ).DataSource(Model)
    )

現在,我們希望能在表格中顯示這個使用者的愛好和家庭資訊,最終的頁面效果如圖所示:

這裡我們需要用到繼承,從最初的模型類 Student 繼承,因為這個繼承類只在檢視層用到,我們命名為 StudentViewModel:

public class StudentViewModel : Student
{

    [Display(Name = "愛好")]
    public string HobbyInfo
    {
        get
        {
            List<string> hobbyNames = new List<string>();
            foreach (var hobby in Hobby)
            {
                var hobbyName = "";
                switch (hobby)
                {
                    case "reading":
                        hobbyName = "讀書";
                        break;
                    case "basketball":
                        hobbyName = "籃球";
                        break;
                    case "travel":
                        hobbyName = "旅遊";
                        break;
                    case "movie":
                        hobbyName = "電影";
                        break;
                    case "music":
                        hobbyName = "音樂";
                        break;
                }
                hobbyNames.Add(hobbyName);
            }
            return String.Join("", hobbyNames.ToArray());
        }
    }


    [Display(Name = "家庭資訊")]
    public string FamilyInfo
    {
        get
        {
            return "父親:" + Family.FatherName + ",母親:" + Family.MotherName;
        }
    }


}

可以看到,在這個繼承的模型類中擴充套件了兩個屬性 HobbyInfo 和 FamilyInfo,其中定義了相應的業務邏輯。

獲取資料時,需要轉為相應的檢視模型類:

public ActionResult Index()
{
    var students = new List<StudentViewModel>();
    foreach (var student in StudentHelper.GetSimpleStudentList())
    {
        students.Add(new StudentViewModel
        {
            Id = student.Id,
            Name = student.Name,
            Gender = student.Gender,
            EntranceYear = student.EntranceYear,
            AtSchool = student.AtSchool,
            Major = student.Major,
            Group = student.Group,
            EntranceDate = student.EntranceDate,
            Hobby = student.Hobby,
            Family = student.Family
        });
    }

    return View(students);
}

最後是,Razor檢視定義:

@(F.Grid().ID("Grid1").IsFluid(true).CssClass("blockpanel").ShowBorder(true).ShowHeader(true).Title("表格").DataIDField("Id").DataTextField("Name")
    .Columns(
        F.RenderFieldFor(m => m.Name),
        F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),
        F.RenderFieldFor(m => m.EntranceYear),
        F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),
        F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").Width(150),
        F.RenderFieldFor(m => m.FamilyInfo).Width(220),
        F.RenderFieldFor(m => m.HobbyInfo).ExpandUnusedSpace(true)
    ).DataSource(Model)
    
)

搞定!

相關推薦

如何在FineUIMvcASP.NET MVC顯示表格資料列表物件

起源 最初,這個問題是知識星球內的一個網友提出的,如何在FineUIMvc中展現複雜的列資料? 在FineUIPro中,我們都知道有一個 TemplateField 模板列可以使用,我們只需要在後臺定義一個 C# 方法,就可以返回任意想要的資料。 可是在FineUIMvc中沒有這麼個列型別,那又

ASP.NET MVC 4如何為不同的瀏覽器自適應佈局檢視

在ASP.NET MVC 4中,可以很簡單地實現針對不同的瀏覽器自適應佈局和檢視。這個得歸功於MVC中的"約定甚於配置"的設計理念。 預設的自適應 MVC 4自動地為移動裝置瀏覽器和PC裝置瀏覽器進行自適應。針對佈局頁面,預設的檔名為_Layout.cshtml,這個預設會被所有的瀏覽器使用。但如果我們希望

如何在FineUIMvcASP.NET MVC檢視繫結多個模型?

起因 這是知識星球內的一個網友提出的,按理說ASP.NET MVC中一個檢視只能繫結一個模型(Model),在檢視頂部標識如下: @model IEnumerable<FineUICore.Examples.Areas.DataModel.Models.Student> 檢視中可

FineUIMvc v1.4.0 發布了ASP.NET MVC控件庫

ima font .com 基礎 ref baidu 捐贈 三石 全部 FineUIMvc v1.4.0 已經於 2017-06-30 發布,FineUIMvc 是基於 jQuery 的專業 ASP.NET MVC 控件庫,是我們的新產品。由於和 FineUI(專業版)共享

ASP.NET MVC 模型 選擇最好的方法將多個model資料模型傳遞到檢視

無論你什麼時候需要保持一些資訊直到一個接著的後來的請求,使用TempData都是很好的方法。它應該在你需要保持例如驗證資訊,錯誤資訊,或者一些小的不包含敏感資料資訊的時候使用。因為它能保證會話來傳遞變數,所以你不應該把敏感的資訊存放在TempData。 (adsbygoogle =

轉載:在ASP.net 3.5 用JSON序列化對象兩種方法

for pep 技術分享 contract arr static returns web memory asp.net3.5中已經集成了序列化對象為json的方法。 1:System.Runtime.Serialization.Json; 2:Syst

.NET MVC同頁面顯示從不同數據庫mssql、mysql的數據

dex datatable 引用 填充 scrip 電話 action eat str    控制器:     private readonly VipViewModel _model = new VipViewModel(); public stati

ASP.NET MVC 學習筆記-7.自定義配置信息後續

字符串 return abstract 新的 work 生成 value DC 連接字符串加密 自定義配置信息的高級應用 通過上篇博文對簡單的自定義配置信息的學習,使得更加靈活的控制系統配置信息。實際項目中,這種配置的靈活度往往無法滿足項目的靈活度和擴展性。 比如,一個

【番外篇】ASP.NET MVC快速入門之免費jQuery控件庫MVC5+EF6

south ade 批量刪除 HP 存儲 重新 mode eve 穩定 目錄 【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入門之安全策略

用EasyUI-DataGrid實現列表批量刪除的功能ASP.NET/MVC

1、前端程式碼:首先給列表新增多選框。注意:當singleSelect的屬性值為false時,才能實現多選功能;當checkbox屬性值為true選擇行勾選,false選擇行不勾選。 <table id="dataGrid" class="easyui-datagrid" title=""

ASP.NET MVC 使用QuertZ元件來搞專案定時計劃再也不用windowsService了!!

前言:拋棄windows計劃,擁抱.NET元件.每個人都喜歡監聽和外掛。今天,幾乎下載任何開源框架,你必定會發現支援這兩個概念。監聽是你建立的C#類,當關鍵事件發生時會收到框架的回撥。例如,當一個作業被排程、沒有排程或觸發器終止和不再觸發時,這些都可以通過設定來通知你的監聽器。Quartz框架包含了排程器監聽

如何給DropDownList控制元件設定樣式ASP.NET MVC

應學校領導要求,要給後臺管理系統新增一個搜尋功能,提供可選擇選項。我選擇使用DropDownList去實現,熟悉.net控制元件的都知道,DropDownList的樣子非常醜,不論是邊框長寬還是裡面的下拉三角形,都給人很不舒服的感覺,作為一個愛美的女生,怎麼可能容忍呢!!

【番外篇】ASP.NET MVC快速入門之免費jQuery控制元件庫MVC5+EF6

目錄 FineUIMvc簡介 FineUIMvc 是基於 jQuery 的專業 ASP.NET MVC 控制元件庫,其前身是基於 WebForms 的開源控制元件庫 FineUI(歷時9年120多個版本)。FineUIMvc(基礎版)包含開源版的全部功能,支援 30 種內建主題和 

ASP.NET MVC 企業級實戰 —— 建立使用者許可權管理示例程式

網上有很多討論ASP.NET MVC,也有討論Jquery外掛的,同時把兩者結合起來做專案開發的卻是比較少。 ASP.NET MVC是比較優秀的後臺框架,而前臺採用JQuery外掛會做出比較漂亮美觀的介面。 講解了如何將兩者結合來開發Web應該系統。 將要建立的使用

asp.net mvc 註冊的郵箱激活功能實現

名稱 work 點擊 rom urn 內容 string 電子郵件 amp 基本流程圖 註冊頁面就不再寫出,現在將發送郵件的代碼粘貼出來 public ActionResult SendEmial() { int

[ASP.NET MVC] Controlle的Aciton方法數據接收方式

http student request str 自動 asp.net nco cti mvc POST數據接收方式包括: 1.request.Form:(逐個獲取表單提交的數據); FormCollection: [HttpPost]public async T

ASP.NET MVC高亮顯示當前頁面選單

1、建立MvcHtmlExtension擴充套件類 1 public static class MvcHtmlExtension 2 { 3 public static MvcHtmlString MenuLink(this HtmlHelper helper, str

使用ASP.NET MVC Futures 的非同步Action

之前看過老趙這兩篇文章。也研究了一下老趙非同步的實現方式。 不過感覺自己擴充套件的話,在ASP.NET MVC中使用非同步還真是麻煩,剛好看到從RC1版開始 ASP.NET MVC Futures中提供了幾個支援非同步的類。 相關的類包括AsyncActionDescriptor、AsyncContr

Asp.net Mvc Pv4使用AjaxHelper

這個有點類似於UpdatePanel,首先要引用2個js一個是Microsoft Ajax Lib,一個是Mvc的Ajax新類 CODE: <script src="/Content/MicrosoftAjax.js" type="text/javascript"

針對Linux ASP.NET MVC網站 httpHandlers配置無效的解決方案

近期有Linux ASP.NET使用者反映,在MVC網站的Web.config中新增 httpHandlers 配置用於處理自定義型別,但是在執行中並沒有產生預期的效果,伺服器返回了404(找不到網頁)錯誤。經我親自測試,在WebForm網站中,httpHandlers節點的配置是有效的,而在MVC中的確無效