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();
}
目录
相关文章
|
11月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
331 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
228 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
263 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
197 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
344 0
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
460 0
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
182 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
435 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
327 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
253 0
下一篇
oss云网关配置