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

简介: 1.如何让Controller不返回视图?(比如仅执行一些数据库操作) 很简单,只要在Controller中定义一个void类型的public方法即可 public void DeleteData() { using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + Server.

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();
}
目录
相关文章
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
54 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
119 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
78 0
|
JavaScript 前端开发 .NET
下一篇
无影云桌面