Asp.Net Mvc中的一些初级问题整理(转)

 

1.如何让Controller不返回视图?(比如仅执行一些数据库操作)

很简单,只要在Controller中定义一个void类型的public方法即可

01 public void DeleteData() 

02 { 

03     using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile))) 

04     { 

05     conn.Open(); 

06     SQLiteCommand cmd = conn.CreateCommand(); 

07     cmd.CommandText = "delete from Products"; 

08     cmd.ExecuteNonQuery(); 

09     }  

10       

11     //顺便给个sqlite使用事务的代码 

12     //using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile))) 

13     //{ 

14     //conn.Open(); 

15     //SQLiteTransaction t = conn.BeginTransaction(); 

16     //try 

17     //{ 

18         //SQLiteCommand cmd = conn.CreateCommand(); 

19         //cmd.CommandText = "insert into Products(Name,CreateDate,UpdateDate) values(@Name,@CreateDate,@UpdateDate)"; 

20   

21         //for (int i = 0; i < 50; i++) 

22         //{ 

23         //cmd.Parameters.Clear(); 

24         //cmd.Parameters.AddWithValue("Name", i.ToString().PadLeft(5, '0')); 

25         //cmd.Parameters.AddWithValue("CreateDate", DateTime.Now); 

26         //cmd.Parameters.AddWithValue("UpdateDate", DateTime.Now); 

27         //cmd.ExecuteNonQuery(); 

28         //} 

29   

30         //t.Commit(); 

31     //} 

32     //catch 

33     //{ 

34         //t.Rollback(); 

35     //} 

36     //} 

37 }

这样就行了,调用方法类似 : http://localhost/Product/DeleteData 即可
2.如何让视图返回纯文本或Xml?

view sourceprint?1 public ActionResult GetTxt()  

2 { 

3     return new ContentResult() { ContentType = "text/plain", ContentEncoding = Encoding.UTF8, Content = "Hello World!" }; 

4 }

 如果要返回xml,把text/plain改为text/xml即可.

3.如何把DataTable传给视图?

虽然很多官方教程都是推荐使用强类型的视图,但是需求是千变万化的,如果确实要传递DataTable给视图,可参考下面这个做:

view sourceprint?01 public ActionResult Index() 

02 { 

03     DataTable tbl = new DataTable(); 

04     using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile))) 

05     { 

06     SQLiteDataAdapter da = new SQLiteDataAdapter("Select * from Products", conn); 

07     da.Fill(tbl); 

08     ViewData["data"] = tbl; 

09     } 

10     return View(); 

11 }

 然后在视图上可以这样写:

view sourceprint?1 <% 

2     DataTable tbl = ViewData["data"] as DataTable; 

3     foreach (DataRow dr in tbl.Rows) 

4     { 

5     //... 

6     } 

7 %>

 4.如何使用自定义控件(做为数据显示模板)?

创建一个Partial View(局部视图),内容可参考这样:

view sourceprint?01 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 

02 <%@ Import Namespace="System.Data" %> 

03 <tr> 

04     <td> 

05         <%=(ViewData.Model as DataRow)["Id"] %> 

06     </td> 

07     <td> 

08         <%=(ViewData.Model as DataRow)["Name"]%> 

09     </td> 

10     <td> 

11         <%=(ViewData.Model as DataRow)["CreateDate"]%> 

12     </td> 

13     <td> 

14         <%=(ViewData.Model as DataRow)["UpdateDate"]%> 

15     </td> 

16 </tr>

 然后在主视图中可这样使用:

view sourceprint?01 <table> 

02 <tr> 

03     <th> 

04     Id 

05     </th> 

06     <th> 

07     Name 

08     </th> 

09     <th> 

10     CreateDate 

11     </th> 

12     <th> 

13     UpdateDate 

14     </th> 

15 </tr> 

16 <% 

17     DataTable tbl = ViewData["data"] as DataTable; 

18     foreach (DataRow dr in tbl.Rows) 

19     { 

20     Html.RenderPartial("~/Views/Product/ProductData.ascx", dr); 

21     } 

22 %> 

23 </table>

 5.页面/视图之间如何跳转?

分二种情况:

void类型的action(即问题1中所说的不返回视图的action):

有且只有一种方法:

view sourceprint?1 Response.Redirect("/product/Index");

 注意:
如果写成Redirect("/product/Index"); 编译也会通过,但是根本不会有效果,因为前面不加Response.则变成了Controller类的Redirect方法,这个是有返回值的,必须用return Redirect()调用才会有效果,但是该方法又是void类型的,不允许return,所以才说这是有且仅有的一种方法.

常规返回ActionResult的action:

方法就很多了:

view sourceprint?01 public ActionResult ShowView1() 

02 {             

03     Response.Redirect("ShowView2"); //方法1           

04     //return Redirect("ShowView2"); //方法2 

05     //return RedirectToAction("ShowView2"); //方法3 

06     return View("ShowView2"); //方法4 

07 } 

08   

09 public ActionResult ShowView2() 

10 { 

11     ViewData["data"] = "View2"; 

12     return View(); 

13 }

作者:菩提树下的杨过
出处:
http://yjmyzz.cnblogs.com

你可能感兴趣的:(mvc,职场,table,休闲)