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();
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaWeb

Mybatis源码-XXXmapper.xml中的resultMap标签解析过程

19130
来自专栏Java成神之路

Java微信开发_Exception_01_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly ref

这个异常是在做微信开发时出现的,在引入了XStream的jar包之后,还是出现了如下错误信息:

11630
来自专栏TechBox

一份走心的iOS开发规范前言约定(一)命名规范(二)编码规范2.14 内存管理规范本文参考文章其他有价值的文章

70590
来自专栏数据结构与算法

BZOJ1269: [AHOI2006]文本编辑器editor

Descriptio 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗? 为了明确任务目标,可可对“文本编辑器...

30270
来自专栏MasiMaro 的技术博文

OLEDB不使用SQL语句直接打开数据表

这样的sql语句。SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持ICommandText对象,但是在OLEDB中...

10320
来自专栏数据结构与算法

洛谷P2792 [JSOI2008]小店购物(最小树形图)

一开始的思路:新建一个虚点向每个点连边,再加上题面中给出的边,边权均为大小*需要购买的数量

9910
来自专栏图像识别与深度学习

蓝牙项目开发心得

35890
来自专栏编码小白

ofbiz view渲染处理机制

1.1.1.1  初始化        ControlServlet.java 这是一个servlet,其配置文件在web.xml里 <servle...

40260
来自专栏calmound

强连通专题

POJ 2762 Going from u to v or from v to u? 题意:判断该图的任意两点是否可达 分析:tarjan后进行缩点,缩点后再建...

29180
来自专栏XAI

【人工智能】动物、植物、车型、菜品、LOGO识别示例代码

图像识别部分接口Java-API调用示例代码 https://gitee.com/xshuai/ai/不是完整的web项目大家没必要下载运行。复制|下载相关代码...

926110

扫码关注云+社区

领取腾讯云代金券