技术开发 频道

ASP.NET MVC3新功能之WebGrid查询绑定

  2. WebGrid Sorting(排序) Ajax的实现

  我们看,在上面的View代码中黄色背景表示的是创建WebGrid对象实例,其中有这样一行ajaxUpdateContainerId:"DivGrid",他表示的是当WebGrid发生AjaxUpdate事件后,将更新后内容显示到指定的元素中。在我们示例中,我们指定的是一个Div对象。也就是说我们期望得到的结果是,当我们点击标题行的列进行排序后,应该把排序后的新内容放到这个Div中,并且是Ajax操作。但是在实际操作中,浏览器会提示如下信息:

1
 

  为什么他会提示这样的信息呢?我们点击上面的结果,查看源代码,有如下行:

1
 

  我们可以看到,他生成的是一个JQuery的操作方式,所以我们必须引用JQuery的类库,如下(本下在_Layout.cshtml中加载的):

<head>
    
<title>@View.Title</title>
    
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    
<script language="javascript" src="@Url.Content("~/Scripts/jquery-1.4.1.min.js")"></script>
  
</head>

 

  当你再次运行时,你就会发现,这时他已经是局部刷新了。

  3. WebGrid Search Conditions(查询条件)的绑定

  我们通常使用Grid的时候肯定不是直接使用的,比如说查询页面,常常有许多查询条件的,我们都知道MVC是没有ViewState的,当我们点击sorting的时候,输入的查询条件就可能会被刷新掉,所以将会影响我们的查询结果,如何解决这个问题呢?

  现将View代码修改如下:

@using MVC3Tutorial; 
@model List<T_STUDENT> 
@{ 
     View.Title = "Gridview"
     Layout = "~/Views/Shared/_Layout.cshtml"

  
@using(Ajax.BeginForm("Gridview","Home",new AjaxOptions{ UpdateTargetId="DivGrid"}) ) 
{
     IDictionary<string, string> searchConditions = new Dictionary<string, string>();
 
     if(TempData["SearchConditions"]!=null)
     {
         searchConditions = TempData["SearchConditions"] as  Dictionary<string, string>;
     }
 
     this.TempData["SearchConditions"]=searchConditions;
         
     string studentName = searchConditions.Keys.Contains("StudentName")?searchConditions["StudentName"]:string.Empty;
     string nricPassport = searchConditions.Keys.Contains("nricPassport")?searchConditions["nricPassport"]:string.Empty;
    
     <div>
         @Html.Encode("Student Name: ")
     </div>
     @Html.TextBox("StudentName",@studentName)
    <div>
         @Html.Encode("NRIC/Passport No.: ")
     </div>
     @Html.TextBox("nricPassport",@nricPassport)
     <br/>
     <input type="Submit" Text="Search"/>
 
     var grid = new WebGrid(source:Model,
     fieldNamePrefix:"grid_",
     defaultSort: "StudentName",
     canPage:true,
     canSort:true,
     ajaxUpdateContainerId:"DivGrid",
     pageFieldName:"paging",
     sortFieldName:"sortField",
     rowsPerPage:10);
 
     <div id="DivGrid">
     @grid.GetHtml(
         columns:grid.Columns(
             grid.Column("StudentID", "Student ID"),
             grid.Column("StudentName", "Student Name"),
             grid.Column("StudentCode", "Student Code"),
             grid.Column("Sex", "Sex"),
             grid.Column("NRICPassport", "NRIC/Passport No.")
         )
     )
     </div>
     <h2>
     Page Count:
     @Html.Encode(grid.PageCount)
     <br/>
     Total Record:
     @Html.Encode(grid.TotalRowCount)
     </h2>
     @Html.Encode(grid.FieldNamePrefix)
 }

  

0
相关文章