MVC初探一之数据访问及页面显示


在.net MVC架构中,据目前所知,应该是提倡彻底摒弃原有Web Forms中控件了,这样的话,首先直接带来的好处便是可以大大提高页面加载的速度。

那如果放弃之前便捷的拖拽式UI控件后,首先遇到的便是UI上如何显示内容的问题。

举一个UI上的列表动态加载数据表中数据的例子来说:

 如果是Web Form Page页面,步骤通常为在工具栏选取控件,拖拽到页面中,然后在后台Default.aspx.cs页面中实现控件的动态绑定。

 1)页面加载后效果如下图所示:

 

图一

2)页面Default.aspx.cs后台Page_Load事件中添加如下代码:

 1 protected void Page_Load(object sender, EventArgs e)
 2 
 3         {
 4 
 5             //页面首次加载
 6 
 7             if(!Page.IsPostBack)
 8 
 9             {
10 
11                 var activityDs = new DataSet();
12 
13  
14 
15                 using (var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["GTHCConnect"].ToString()))
16 
17                 {
18 
19                     sqlConn.Open();
20 
21                     var sqlCommandText = " select * from dbo.ActivityCatalogInfo ";
22 
23                     var da = new SqlDataAdapter(sqlCommandText, sqlConn);
24 
25                     da.Fill(activityDs);
26 
27                 }
28 
29  
30 
31                 var categoryNameList = (from DataRow row in activityDs.Tables[0].Rows select Convert.ToString(row["NameCHS"])).ToList();
32 
33                 BulletedList1.DataSource = categoryNameList;
34 
35                 BulletedList1.DataBind();
36 
37             }
38 
39         }

 

 那对于实现同样动态列表显示功能MVC Web .cshtml静态页面来说,无法使用以上的UI控件。那么要实现以上列表显示的功能就得借助MVC的Razor语法。

 1)页面代码如下所示,通过遍历ViewData存储列表内容,实现动态加载页面上列表内容:

 1 <ul>
 2 
 3                 <li><a id="0" href="javascript:void(0)">优惠活动</a></li>
 4 
 5                 <% foreach (DataRow activities in ((DataSet)ViewData["activityDs"]).Tables[0].Rows)
 6 
 7                  {%>
 8 
 9                     <li><%=Html.ActionLink((string) activities["NameCHS"], new { id = activities["CatalogId"] }.ToString())%> </li>
10 
11                 <%}
12 
13                   %>
14 
15 </ul>

 

2)那对于ViewData["activityDs"]的内容的获取,在MVC架构中,则通过Controller来实现,

在HomeController中的Index()方法中,添加如下代码:

 1 public ActionResult Index()
 2 
 3         {
 4 
 5             ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
 6 
 7             var activityDs = new DataSet();
 8 
 9  
10 
11             using (var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["GTHCConnect"].ToString()))
12 
13             {
14 
15                 sqlConn.Open();
16 
17                 var sqlCommandText = " select * from dbo.ActivityCatalogInfo ";
18 
19                 var da = new SqlDataAdapter(sqlCommandText, sqlConn);
20 
21                 da.Fill(activityDs);
22 
23             }
24 
25             //将Dataset内容填充至ViewData["activityDs"]当中
26 
27             ViewData["activityDs"] = activityDs;
28 
29             return View();
30 
31         }

 

 3)运行页面,最终得到如下相同效果的动态列表页面

 

 

看到这里,难免会有疑问,首先上面的MVC的代码中只看到V(View),C(controller),M在哪里呢,上面的代码只是偷懒的做法,因为MVC毕竟是一种设计架构思想嘛, 如果没有M(model)照样页可以实现相同的功能。只是目前这样就不是典型的MVC架构模式了(典型的MVC代码实现,请参看MVC初探-数据访问及页面显示之二)。

其次,和Web Forms代码相比,实现思想都大同小异嘛,对,在加载内容,两者实现思想区别不大,都是获取数据库中数据,并将其存放至容器中。前者是将其赋予控件的DataSource,后者则是赋予ViewData,区别在于前者是控件自身在页面加载时动态解析DataSource内容,或者这是在页面加载时,动态加载ViewData中存储的内容。

那MVC的好处体现在哪,那对于加载速度,可维护性,可测试性的显而易见的好处就不多说了,至少在本例中,它彻底摒弃了臃肿的UI控件,实现了静态页面中动态显示内容的功能。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM