• Asp.Net Mvc中的一些初级问题整理


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

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

    public void DeleteData()
    {
        using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile)))
        {
    	conn.Open();
    	SQLiteCommand cmd = conn.CreateCommand();
    	cmd.CommandText = "delete from Products";
    	cmd.ExecuteNonQuery();
        } 
        
        //顺便给个sqlite使用事务的代码
        //using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile)))
        //{
    	//conn.Open();
    	//SQLiteTransaction t = conn.BeginTransaction();
    	//try
    	//{
    	    //SQLiteCommand cmd = conn.CreateCommand();
    	    //cmd.CommandText = "insert into Products(Name,CreateDate,UpdateDate) values(@Name,@CreateDate,@UpdateDate)";
    
    	    //for (int i = 0; i < 50; i++)
    	    //{
    		//cmd.Parameters.Clear();
    		//cmd.Parameters.AddWithValue("Name", i.ToString().PadLeft(5, '0'));
    		//cmd.Parameters.AddWithValue("CreateDate", DateTime.Now);
    		//cmd.Parameters.AddWithValue("UpdateDate", DateTime.Now);
    		//cmd.ExecuteNonQuery();
    	    //}
    
    	    //t.Commit();
    	//}
    	//catch
    	//{
    	    //t.Rollback();
    	//}
        //}
    }
    

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

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

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

    3.如何把DataTable传给视图?

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

    public ActionResult Index()
    {
        DataTable tbl = new DataTable();
        using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.MapPath(_dbFile)))
        {
    	SQLiteDataAdapter da = new SQLiteDataAdapter("Select * from Products", conn);
    	da.Fill(tbl);
    	ViewData["data"] = tbl;
        }
        return View();
    }
    

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

    <%
        DataTable tbl = ViewData["data"] as DataTable;
        foreach (DataRow dr in tbl.Rows)
        {
    	//...
        }
    %>
    

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

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

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <%@ Import Namespace="System.Data" %>
    <tr>
        <td>
            <%=(ViewData.Model as DataRow)["Id"] %>
        </td>
        <td>
            <%=(ViewData.Model as DataRow)["Name"]%>
        </td>
        <td>
            <%=(ViewData.Model as DataRow)["CreateDate"]%>
        </td>
        <td>
            <%=(ViewData.Model as DataRow)["UpdateDate"]%>
        </td>
    </tr>
    

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

    <table>
    <tr>
        <th>
    	Id
        </th>
        <th>
    	Name
        </th>
        <th>
    	CreateDate
        </th>
        <th>
    	UpdateDate
        </th>
    </tr>
    <%
        DataTable tbl = ViewData["data"] as DataTable;
        foreach (DataRow dr in tbl.Rows)
        {
    	Html.RenderPartial("~/Views/Product/ProductData.ascx", dr);
        }
    %>
    </table>
    

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

    分二种情况:

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

    有且只有一种方法:

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

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

    常规返回ActionResult的action:

    方法就很多了:

    public ActionResult ShowView1()
    {            
        Response.Redirect("ShowView2"); //方法1          
        //return Redirect("ShowView2"); //方法2
        //return RedirectToAction("ShowView2"); //方法3
        return View("ShowView2"); //方法4
    }
    
    public ActionResult ShowView2()
    {
        ViewData["data"] = "View2";
        return View();
    }
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    分享一个文字转成语音的工具,视频配音神器
    生手linux服务器维护常用命令记录
    信不信?各种红包App最后都会整合游戏!App+游戏的变现模式分析
    一个玩游戏的失足青年,转行做游戏开发到教育的痛苦挣扎过程(4)
    免费送!CocosCreator 6.1超级大礼包!
    一个玩游戏的失足青年,转行做游戏开发到教育的痛苦挣扎过程(3)
    【激励视频组件】零编程,即拖即用,妈妈再也不用担心小游戏 SDK 接入了!
    惊天大案!80多款游戏源码被非法倒卖交换!波及数千余人涉案!
    小游戏开发运营挣钱模型之—游戏调优篇(1)
    有个事正在悄然发生,估计谁都无法逆转!只能积极拥抱
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1679764.html
Copyright © 2020-2023  润新知