当前位置:Gxlcms > asp.net > 灵活掌握Asp.net MVC中GridView的使用方法

灵活掌握Asp.net MVC中GridView的使用方法

时间:2021-07-01 10:21:17 帮助过:12人阅读

本文教程为大家分享了GridView控件的使用方法和具体实现代码,供大家参考,具体内容如下

Models文件下实体类:

  1. public class Customer
  2. {
  3. public int Id { get; set; }
  4. public string CompanyName { get; set; }
  5. public string ContactTitle { get; set; }
  6. public string Address { get; set; }
  7. public string City { get; set; }
  8. public string Country { get; set; }
  9. public string Phone { get; set; }
  10. public DateTime Founded { get; set; }
  11. }

  1. public class CustomersViewModel
  2. {
  3. public IQueryable<Customer> Customers { get; set; }
  4. public PagingInfo PagingInfo { get; set; }
  5. public string JsonPagingInfo { get; set; }
  6. }
  1. public static class ExpresssionBuilder
  2. {
  3. private static readonly MethodInfo containsMethod = typeof(string).GetMethod("Contains");
  4. private static readonly MethodInfo startsWithMethod = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) });
  5. private static readonly MethodInfo endsWithMethod = typeof(string).GetMethod("EndsWith", new Type[] { typeof(string) });
  6. public static Expression<Func<T,bool>> GetExpression<T>(IList<FilterObject> filters)
  7. {
  8. if (filters.Count == 0)
  9. return null;
  10. ParameterExpression param = Expression.Parameter(typeof(T), "t");
  11. Expression exp = null;
  12. if (filters.Count == 1)
  13. exp = GetExpression<T>(param, filters[0]);
  14. else if (filters.Count == 2)
  15. exp = GetExpression<T>(param, filters[0], filters[1]);
  16. else
  17. {
  18. while (filters.Count > 0)
  19. {
  20. var f1 = filters[0];
  21. var f2 = filters[1];
  22. if (exp == null)
  23. exp = GetExpression<T>(param, filters[0], filters[1]);
  24. else
  25. exp = Expression.AndAlso(exp, GetExpression<T>(param, filters[0], filters[1]));
  26. filters.Remove(f1);
  27. filters.Remove(f2);
  28. if (filters.Count == 1)
  29. {
  30. exp = Expression.AndAlso(exp, GetExpression<T>(param, filters[0]));
  31. filters.RemoveAt(0);
  32. }
  33. }
  34. }
  35. return Expression.Lambda<Func<T, bool>>(exp, param);
  36. }
  37. private static Expression GetExpression<T>(ParameterExpression param, FilterObject filter)
  38. {
  39. MemberExpression member = Expression.Property(param, filter.Column);
  40. //ConstantExpression constant = Expression.Constant(filter.Value);
  41. //新的逻辑来处理可空Decimal和DateTime值
  42. UnaryExpression constant = null;
  43. if (member.Type == typeof(Decimal?))
  44. {
  45. constant = Expression.Convert(Expression.Constant(Decimal.Parse(filter.Value)) , member.Type);
  46. }
  47. else if (member.Type == typeof(DateTime?))
  48. {
  49. constant = Expression.Convert(Expression.Constant(DateTime.Parse(filter.Value)), member.Type);
  50. }
  51. else
  52. {
  53. constant = Expression.Convert(Expression.Constant(filter.Value), member.Type);
  54. }
  55. switch (filter.Operator)
  56. {
  57. case FilterOperator.Equals:
  58. return Expression.Equal(member, constant);
  59. case FilterOperator.GreaterThan:
  60. return Expression.GreaterThan(member, constant);
  61. case FilterOperator.GreaterThanOrEqual:
  62. return Expression.GreaterThanOrEqual(member, constant);
  63. case FilterOperator.LessThan:
  64. return Expression.LessThan(member, constant);
  65. case FilterOperator.LessThanOrEqual:
  66. return Expression.LessThanOrEqual(member, constant);
  67. case FilterOperator.Contains:
  68. return Expression.Call(member, containsMethod, constant);
  69. case FilterOperator.StartsWith:
  70. return Expression.Call(member, startsWithMethod, constant);
  71. case FilterOperator.EndsWith:
  72. return Expression.Call(member, endsWithMethod, constant);
  73. case FilterOperator.NotEqual:
  74. return Expression.Negate(Expression.Equal(member, constant));
  75. }
  76. return null;
  77. }
  78. private static BinaryExpression GetExpression<T> (ParameterExpression param, FilterObject filter1, FilterObject filter2)
  79. {
  80. Expression bin1 = GetExpression<T>(param, filter1);
  81. Expression bin2 = GetExpression<T>(param, filter2);
  82. return Expression.AndAlso(bin1, bin2);
  83. }
  84. }

  1. public class PagingInfo
  2. {
  3. public List<int> PageOptions { get; set; }
  4. public bool ShowPageOptions { get; set; }
  5. public int TotalItems { get; set; }
  6. public int ItemsPerPage { get; set; }
  7. public int CurrentPage { get; set; }
  8. public int TotalPages
  9. {
  10. get { return (int)Math.Ceiling((decimal)TotalItems / (ItemsPerPage != 0 ? ItemsPerPage : 1)); }
  11. }
  12. public SortObject Sort { get; set; }
  13. public IList<FilterObject> Filters { get; set; }
  14. public string SearchTerm { get; set; }
  15. }
  16. public class SortObject
  17. {
  18. public String SortColumn { get; set; }
  19. public SortDirection Direction { get; set; }
  20. }
  21. public class FilterObject
  22. {
  23. public string Column { get; set; }
  24. public string Value { get; set; }
  25. public FilterOperator Operator { get; set; }
  26. public FilterConjunction Conjunction { get; set; }
  27. }
  28. /********* ENUMS *************/
  29. public enum SortDirection
  30. {
  31. NotSet,
  32. Ascending,
  33. Descending
  34. }
  35. public enum FilterOperator
  36. {
  37. Contains,
  38. GreaterThan,
  39. GreaterThanOrEqual,
  40. LessThan,
  41. LessThanOrEqual,
  42. StartsWith,
  43. EndsWith,
  44. Equals,
  45. NotEqual
  46. }
  47. public enum FilterConjunction
  48. {
  49. And,
  50. Or
  51. }
  52. public class Extensions
  53. {
  54. public static string GetWhereClause(FilterObject filterObj, Type valueType)
  55. {
  56. string whereClause = "true";
  57. if (valueType != typeof (DateTime))
  58. {
  59. switch (filterObj.Operator)
  60. {
  61. case FilterOperator.Contains:
  62. if (valueType == typeof (string))
  63. whereClause += string.Format(" {0} {1}.Contains(\"{2}\")", filterObj.Conjunction,
  64. filterObj.Column, filterObj.Value);
  65. break;
  66. case FilterOperator.GreaterThan:
  67. if (valueType != typeof (string))
  68. whereClause += string.Format(" {0} {1} > {2}", filterObj.Conjunction, filterObj.Column,
  69. filterObj.Value);
  70. break;
  71. case FilterOperator.GreaterThanOrEqual:
  72. if (valueType != typeof (string))
  73. whereClause += string.Format(" {0} {1} >= {2}", filterObj.Conjunction, filterObj.Column,
  74. filterObj.Value);
  75. break;
  76. case FilterOperator.LessThan:
  77. if (valueType != typeof (string))
  78. whereClause += string.Format(" {0} {1} < {2}", filterObj.Conjunction, filterObj.Column,
  79. filterObj.Value);
  80. break;
  81. case FilterOperator.LessThanOrEqual:
  82. if (valueType != typeof (string))
  83. whereClause += string.Format(" {0} {1} <= {2}", filterObj.Conjunction, filterObj.Column,
  84. filterObj.Value);
  85. break;
  86. case FilterOperator.StartsWith:
  87. if (valueType != typeof (string))
  88. whereClause += string.Format(" {0} {1}.StartsWith(\"{2}\")", filterObj.Conjunction,
  89. filterObj.Column, filterObj.Value);
  90. break;
  91. case FilterOperator.EndsWith:
  92. if (valueType != typeof (string))
  93. whereClause += string.Format(" {0} {1}.EndsWith(\"{2}\")", filterObj.Conjunction,
  94. filterObj.Column, filterObj.Value);
  95. break;
  96. case FilterOperator.Equals:
  97. whereClause +=
  98. string.Format(valueType == typeof (string) ? " {0} {1} == \"{2}\"" : " {0} {1} == {2}",
  99. filterObj.Conjunction, filterObj.Column, filterObj.Value);
  100. break;
  101. case FilterOperator.NotEqual:
  102. whereClause +=
  103. string.Format(valueType == typeof (string) ? " {0} {1} != \"{2}\"" : " {0} {1} != {2}",
  104. filterObj.Conjunction, filterObj.Column, filterObj.Value);
  105. break;
  106. default:
  107. throw new ArgumentOutOfRangeException();
  108. }
  109. }
  110. else
  111. {
  112. DateTime dt;
  113. DateTime.TryParse(filterObj.Value, out dt);
  114. switch (filterObj.Operator)
  115. {
  116. case FilterOperator.Contains:
  117. break;
  118. case FilterOperator.GreaterThan:
  119. whereClause += string.Format(" {0} {1} > DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  120. break;
  121. case FilterOperator.GreaterThanOrEqual:
  122. whereClause += string.Format(" {0} {1} >= DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  123. break;
  124. case FilterOperator.LessThan:
  125. whereClause += string.Format(" {0} {1} < DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  126. break;
  127. case FilterOperator.LessThanOrEqual:
  128. whereClause += string.Format(" {0} {1} <= DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  129. break;
  130. case FilterOperator.StartsWith:
  131. break;
  132. case FilterOperator.EndsWith:
  133. break;
  134. case FilterOperator.Equals:
  135. whereClause += string.Format(" {0} {1} == DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  136. break;
  137. case FilterOperator.NotEqual:
  138. whereClause += string.Format(" {0} {1} != DateTime(\"{2}\")", filterObj.Conjunction, filterObj.Column, dt);
  139. break;
  140. default:
  141. throw new ArgumentOutOfRangeException();
  142. }
  143. }
  144. return whereClause;
  145. }
  146. }

 

  1. public class GridViewModelProvider
  2. {
  3. internal static CustomersViewModel GetCustomersViewModel(MyDbContext db, PagingInfo PagingData)
  4. {
  5. int TotalItems = 0;
  6. var model = new CustomersViewModel()
  7. {
  8. Customers = GetResources(db.Customers.AsQueryable(), PagingData, out TotalItems),
  9. PagingInfo = new PagingInfo()
  10. {
  11. CurrentPage = PagingData.CurrentPage,
  12. ItemsPerPage = PagingData.ItemsPerPage,
  13. PageOptions = new List<int>() { 10, 25, 50, 100 },
  14. ShowPageOptions = true,
  15. SearchTerm = PagingData.SearchTerm,
  16. Sort = PagingData.Sort,
  17. Filters = PagingData.Filters
  18. }
  19. };
  20. model.PagingInfo.TotalItems = TotalItems;
  21. model.JsonPagingInfo = Json.Encode(model.PagingInfo);
  22. return model;
  23. }
  24. private static IQueryable<Customer> GetResources(IQueryable<Customer> Customers, PagingInfo PagingData, out int TotalItems)
  25. {
  26. var customers = Customers;
  27. //search
  28. if (!string.IsNullOrEmpty(PagingData.SearchTerm))
  29. {
  30. customers = customers.Where(x => (x.CompanyName.Contains(PagingData.SearchTerm) || x.ContactTitle.Contains(PagingData.SearchTerm)));
  31. }
  32. //filter
  33. if (PagingData.Filters != null)
  34. {
  35. foreach (var filterObj in PagingData.Filters)
  36. {
  37. switch (filterObj.Column)
  38. {
  39. case "City":
  40. if (filterObj.Value.ToLower() != "all")
  41. customers = customers.Where(Extensions.GetWhereClause(filterObj, typeof(string)));
  42. break;
  43. //Add Other Filter Columns Here
  44. }
  45. }
  46. }
  47. TotalItems = customers.Count();
  48. //sort
  49. customers = customers.OrderBy(x => x.Id);
  50. if (PagingData.Sort != null)
  51. {
  52. switch (PagingData.Sort.Direction)
  53. {
  54. case SortDirection.Ascending:
  55. if (PagingData.Sort.SortColumn == "CompanyName")
  56. {
  57. customers = customers.OrderBy(x => x.CompanyName);
  58. }
  59. else if (PagingData.Sort.SortColumn == "ContactTitle")
  60. {
  61. customers = customers.OrderBy(x => x.ContactTitle);
  62. }
  63. break;
  64. case SortDirection.Descending:
  65. if (PagingData.Sort.SortColumn == "CompanyName")
  66. {
  67. customers = customers.OrderByDescending(x => x.CompanyName);
  68. }
  69. else if (PagingData.Sort.SortColumn == "ContactTitle")
  70. {
  71. customers = customers.OrderByDescending(x => x.ContactTitle);
  72. }
  73. break;
  74. case SortDirection.NotSet:
  75. default:
  76. break;
  77. }
  78. }
  79. customers = customers
  80. .Skip((PagingData.CurrentPage - 1) * PagingData.ItemsPerPage).Take(PagingData.ItemsPerPage);
  81. return customers;
  82. }
  83. }

  1. /// <summary>
  2. /// 启用查询谓词的高效,动态组合。
  3. /// </summary>
  4. public static class PredicateBuilder
  5. {
  6. /// <summary>
  7. /// 创建一个计算
结果为true的谓词。 /// </summary> public static Expression<Func<T, bool>> True<T>() { return param => true; } /// <summary> /// 创建一个计算结果为false的谓词 /// </summary> public static Expression<Func<T, bool>> False<T>() { return param => false; } /// <summary> /// 创建一个从指定的lambda表达式的谓词表达式。 /// </summary> public static Expression<Func<T, bool>> Create<T>(Expression<Func<T, bool>> predicate) { return predicate; } /// <summary> /// 结合了第二第一谓词使用逻辑“and”。 /// </summary> public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second) { return first.Compose(second, Expression.AndAlso); } /// <summary> /// 结合了第二第一谓词使用逻辑“or”。 /// </summary> public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second) { return first.Compose(second, Expression.OrElse); } /// <summary> ///否定谓词 /// </summary> public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expression) { var negated = Expression.Not(expression.Body); return Expression.Lambda<Func<T, bool>>(negated, expression.Parameters); } /// <summary> /// 使用指定的合并函数,合并第二和第一表达式 /// </summary> static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge) { //第二参数映射到第一参数 var map = first.Parameters .Select((f, i) => new { f, s = second.Parameters[i] }) .ToDictionary(p => p.s, p => p.f); //第一lambda表达式的参数替换在第二lambda表达式参数 var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body); //从第一个表达式创建一个带参数的合并lambda表达式 return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters); } class ParameterRebinder : ExpressionVisitor { readonly Dictionary<ParameterExpression, ParameterExpression> map; ParameterRebinder(Dictionary<ParameterExpression, ParameterExpression> map) { this.map = map ?? new Dictionary<ParameterExpression, ParameterExpression>(); } public static Expression ReplaceParameters(Dictionary<ParameterExpression, ParameterExpression> map, Expression exp) { return new ParameterRebinder(map).Visit(exp); } protected override Expression VisitParameter(ParameterExpression p) { ParameterExpression replacement; if (map.TryGetValue(p, out replacement)) { p = replacement; } return base.VisitParameter(p); } } }

MyDbContext.CS代码:

  1. public class MyDbContext : DbContext
  2. {
  3. public MyDbContext()
  4. : base("DefaultConnection")
  5. {
  6. }
  7. public DbSet<Customer> Customers { get; set; }
  8. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  9. {
  10. modelBuilder.Entity<Customer>().Property(c => c.CompanyName).HasMaxLength(40);
  11. modelBuilder.Entity<Customer>().Property(c => c.ContactTitle).HasMaxLength(40);
  12. }
  13. }

HomeController.cs控制器:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. var model = new CustomersViewModel()
  6. {
  7. Customers = null,
  8. PagingInfo = new PagingInfo()
  9. {
  10. CurrentPage=1,
  11. ItemsPerPage= 10,
  12. PageOptions = new List<int>() { 10,25, 50, 100},
  13. ShowPageOptions= true,
  14. TotalItems=1
  15. }
  16. };
  17. return View(model);
  18. }
  19. public ActionResult GetCustomers(PagingInfo PagingData)
  20. {
  21. var db = new MyDbContext();
  22. var model = GridViewModelProvider.GetCustomersViewModel(db, PagingData);
  23. return PartialView("_CustomersPartial", model);
  24. }
  25. public ActionResult About()
  26. {
  27. ViewBag.Message = "您的应用程序描述页面。";
  28. return View();
  29. }
  30. public ActionResult Contact()
  31. {
  32. ViewBag.Message = "您的联系页面。";
  33. return View();
  34. }
  35. }

Home视图文件夹下:

_CustomersPartial.cshtml

  1. @model mesoft.gridview.Models.CustomersViewModel
  2. @*在这里写下返回的数据的详细信息*@
  3. <span class="gridview-data-details" style="display:none;">@Html.Raw(Model.JsonPagingInfo)</span>
  4. <table class="table table-bordered table-striped">
  5. <thead>
  6. <tr class="gridview-list-header">
  7. <th>
  8. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().Id))
  9. </th>
  10. <th class="sortable" data-sort="CompanyName">
  11. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().CompanyName))
  12. </th>
  13. <th class="sortable" data-sort="ContactTitle">
  14. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().ContactTitle))
  15. </th>
  16. <th>
  17. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().Country))
  18. </th>
  19. <th>
  20. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().City))
  21. </th>
  22. <th>
  23. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().Address))
  24. </th>
  25. <th>
  26. @(Html.DisplayNameFor(x => x.Customers.FirstOrDefault().Phone))
  27. </th>
  28. <th>
  29. @Html.DisplayNameFor(x=> x.Customers.FirstOrDefault().Founded)
  30. </th>
  31. </tr>
  32. </thead>
  33. <tbody id="CustomersTable" class="gridview-list-items">
  34. @if (Model.Customers.Any())
  35. {
  36. foreach (var c in Model.Customers)
  37. {
  38. <tr>
  39. <td class="value">@c.Id</td>
  40. <td class="value">@c.CompanyName</td>
  41. <td class="value">@c.ContactTitle</td>
  42. <td class="value">@c.Country</td>
  43. <td class="value">@c.City</td>
  44. <td class="Description">@c.Address</td>
  45. <td class="value">@c.Phone</td>
  46. <td>@c.Founded</td>
  47. </tr>
  48. }
  49. }
  50. else
  51. {
  52. <tr>
  53. <td colspan="8">
  54. <div class="alert alert-warning alert-dismissable">
  55. <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
  56. <strong>警告!</strong> 没有客户找到!
  57. </div>
  58. </td>
  59. </tr>
  60. }
  61. @Html.Raw(ViewBag.Script)
  62. </tbody>
  63. </table>

_GridViewPartial.cshtml

  1. @model mesoft.gridview.Models.CustomersViewModel
  2. <!-- GRIDVIEW-->
  3. <div class="gridview gridview1">
  4. <!-- GridView Header-->
  5. <div class="gridview-header">
  6. <!--GridView的头的左边部分-->
  7. <div class="col-sm-6">
  8. <div class="gridview-search">
  9. <div class="search input-group">
  10. <input class="form-control" placeholder="Search" type="search">
  11. <span class="input-group-btn">
  12. <button class="btn btn-default" type="button">
  13. <span class="fa fa-search"></span>
  14. <span class="sr-only">Search</span>
  15. </button>
  16. </span>
  17. </div>
  18. </div>
  19. </div>
  20. <!-- GridView的头右边部分-->
  21. <div class="col-sm-6 text-right">
  22. <!-- 这里添加任何筛选操作-->
  23. @{
  24. string[] cityFilters = {"Istanbul", "Trabzon", "Ankara", "Izmir", "Samsun", "Erzurum"};
  25. }
  26. 根据城市筛选:
  27. <div class="btn-group">
  28. <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
  29. Select City <span class="caret"></span>
  30. </button>
  31. <ul class="dropdown-menu filter-parent" role="menu">
  32. @foreach (var city in cityFilters)
  33. {
  34. <li><a href="#" class="filter"
  35. data-filter-column="City"
  36. data-filter-value="@city"
  37. data-filter-operator="@mesoft.gridview.Models.FilterOperator.Equals"
  38. data-filter-conjunction="@mesoft.gridview.Models.FilterConjunction.And">@city</a></li>
  39. }
  40. <li class="divider"></li>
  41. <li class="active"><a href="#" class="filter"
  42. data-filter-column="City"
  43. data-filter-value="All">All</a></li>
  44. </ul>
  45. </div>
  46. </div>
  47. </div>
  48. <!-- GridView ViewPort-->
  49. <div class="gridview-viewport" id="viewport"
  50. data-getdata-function="@Url.Action("GetCustomers", "Home")"
  51. data-default-pagesize="10">
  52. <div class="gridview-canvas" style="min-height:400px;">
  53. @*Data Will Load Here*@
  54. </div>
  55. <div class="loading gridview gridview-loader">
  56. <img src="~/content/images/loading.gif" />
  57. </div>
  58. </div>
  59. <!-- GridView的分页区域-->
  60. <div class="gridview-footer">
  61. @Html.DisplayFor(x => x.PagingInfo, "Pager")
  62. </div>
  63. </div>

About.cshtml

  1. @{
  2. ViewBag.Title = "About";
  3. }
  4. <h2>@ViewBag.Title.</h2>
  5. <h3>@ViewBag.Message</h3>
  6. <p>#</p>

Contact.cshtml

  1. @{
  2. ViewBag.Title = "Contact";
  3. }
  4. <h2>@ViewBag.Title.</h2>
  5. <h3>@ViewBag.Message</h3>
  6. <address>
  7. <strong>Support:</strong> <a href="827937686@qq.com">827937686@qq.com</a><br />
  8. </address>

Index.cshtml

  1. @model mesoft.gridview.Models.CustomersViewModel
  2. @{
  3. ViewBag.Title = "Home Page";
  4. }
  5. <div class="jumbotron">
  6. <h1>Gridview</h1>
  7. <p class="lead">简单易用,开发简单</p>
  8. <p><a href="#" class="btn btn-primary btn-lg">Learn more »</a></p>
  9. </div>
  10. <!-- GRIDVIEW Area-->
  11. <div class="row">
  12. @Html.Partial("_GridViewPartial")
  13. </div>
  14. @section Scripts {
  15. <script>
  16. $('.gridview1').meGridView();
  17. //$('.gridview2').meGridView();
  18. </script>
  19. }

Shared文件夹下:

_Layout.cshtml

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>@ViewBag.Title -GridView的用法示例应用程序</title>
  7. @Styles.Render("~/Content/css")
  8. @Scripts.Render("~/bundles/modernizr")
  9. </head>
  10. <body>
  11. <div class="navbar navbar-inverse navbar-fixed-top">
  12. <div class="container">
  13. <div class="navbar-header">
  14. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
  15. <span class="icon-bar"></span>
  16. <span class="icon-bar"></span>
  17. <span class="icon-bar"></span>
  18. </button>
  19. @Html.ActionLink("GridView", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
  20. </div>
  21. <div class="navbar-collapse collapse">
  22. <ul class="nav navbar-nav">
  23. <li>@Html.ActionLink("Home", "Index", "Home")</li>
  24. <li>@Html.ActionLink("About", "About", "Home")</li>
  25. <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
  26. </ul>
  27. @*@Html.Partial("_LoginPartial")*@
  28. </div>
  29. </div>
  30. </div>
  31. <div class="container body-content">
  32. @RenderBody()
  33. <hr />
  34. <footer>
  35. <p>© @DateTime.Now.Year - WuLex</p>
  36. </footer>
  37. </div>
  38. @Scripts.Render("~/bundles/jquery")
  39. @Scripts.Render("~/bundles/bootstrap")
  40. @RenderSection("scripts", required: false)
  41. </body>
  42. </html>

运行结果如图:

为大家附3个精彩的专题:

ASP.NET控件使用手册

ASP.NET数据绑定控件使用汇总

ASP.NET控件使用汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行