前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Asp.Net Mvc中的一些初级问题整理

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

作者头像
菩提树下的杨过
发布2018-01-23 15:04:50
9670
发布2018-01-23 15:04:50
举报

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

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

代码语言:javascript
复制
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?

代码语言:javascript
复制
public ActionResult GetTxt() 
{
    return new ContentResult() { ContentType = "text/plain", ContentEncoding = Encoding.UTF8, Content = "Hello World!" };
}

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

3.如何把DataTable传给视图?

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

代码语言:javascript
复制
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();
}

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

代码语言:javascript
复制
<%
    DataTable tbl = ViewData["data"] as DataTable;
    foreach (DataRow dr in tbl.Rows)
    {
	//...
    }
%>

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

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

代码语言:javascript
复制
<%@ 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>

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

代码语言:javascript
复制
<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):

有且只有一种方法:

代码语言:javascript
复制
Response.Redirect("/product/Index"); 

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

常规返回ActionResult的action:

方法就很多了:

代码语言:javascript
复制
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();
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-03-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档