• 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?

    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给视图,可参考下面这个做:

    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 }

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

    1 <%
    2     DataTable tbl = ViewData["data"] as DataTable;
    3     foreach (DataRow dr in tbl.Rows)
    4     {
    5     //...
    6     }
    7 %>

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

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

    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>

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

    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):

    有且只有一种方法:

    1 Response.Redirect("/product/Index");

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

    常规返回ActionResult的action:

    方法就很多了:

    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 }
  • 相关阅读:
    mac zsh选择到行首的快捷键
    phalcon下拉列表
    tinycore remaster方法
    bundle安装方法
    centos7安装avahi
    pydoc介绍
    macosx下apache的默认用户为daemon
    centos配置ssh免密码登录后,仍提示输入密码
    xampp默认项目文件夹htdocs
    微信开发:"errcode": -1000,"errmsg": "system error"错误的解决办法
  • 原文地址:https://www.cnblogs.com/dudu837/p/1813432.html
Copyright © 2020-2023  润新知