跨Controllers传数据
今天遇到两个问题,第一个是跨controller传值,后一个是比较简单的linq数据库查询问题。先描述以下问题我有一个入库单和一个入库明细,入库的逻辑是先填写入库单在填入库明细。两者要么同时完成,要么都不完成。如果未完成写入数据库的数据要删除。当然尼你可以中途取消这次入库。因此为了实现这个功能加了一个链接
@Html.ActionLink("取消该入库单", "Cancel", "CancelStoreInForm"),
CancelStoreInForm是控制器名称,Cancel是控制器中处理的相应函数名。首先分析了一下要么在填入库单时就取消,要么在填入库明细时取消。前者数据没有保存到数据库,不用做任何操作。而后者入库单已经保存到了数据库,需要删除数据。
对于在填入库明细时因为之前的入库单已经保存到了数据库,此时要取消入库就的得删除入库单的数据。问题来了,删哪一条数据?这期间就需要数据传递然而入库单和入库明细有由两个不同的控制器控制。一,从入库单的视图传递入库单号到入库明细控制器。二,直接从入库单控制器传数据单入库明细控制器。经过查阅网上一些资料知道视图控制器之间传递数据有以下三种方式(http://blog.sina.com.cn/s/blog_687960370101cfjh.html):
1、ViewData
只能在一个动作方法中设置,在相关的视图中获取,只对当前视图有效。相当于ViewState
使用方法:
Action中:ViewData["test"] = "test";
视图中:@Html.Encode(ViewData["test"])
在mvc3中已经用ViewBag替代ViewData:
Action中:ViewBag.Test= "test";
视图中:@Html.Encode("Test" )
2、TempData
可以在多个方法或者多个页面中设置、读取。TempData只能在控制器中传递一次,每个元素只能被访问一次,访问后被删除。
TempData实质上是保存在session中,每次读取都是从session中获取并删除。
使用方法:
Action中:TempData["TMessage"] = "测试TempData";
视图中:@TempData["TMessage"]
3、model传递(强类型传递)
model传递数据可以解决强类型数据传递。通过view()方法传递实例化对象到视图中。
Action中:var model = new uerList {new user{name ="name1",age="12"},new user{name="name2",age="23"}};
return View(model);
视图中:@using ~.Models.user 或者@model ~.Models.user
@ foreach( var item in Model ){
@item.name @item.age
}
PS:
传递多个数据对象的方法:
创建一个类,将多数据组合进新类中,在model中传递新类的实例即可。
Model中:public class NewClass{
public Name names{get;set;}
public Saly salys{get;set;}
}
Action中: NewClass nc = new NewClass();
nc.names= userlist;
nc.salys = salysList;
return View(nc);
视图中:@model ~.Models.NewClass
@ foreach( item in model.names) {
@item.~
}
最终经过尝试使用TempData["informno"]这种方法可行,该方法可以控制器向视图传递数据,控制器向控制器传传递数据。
还有一个linq小问题
var storein= db.aaa.SingleOrDefault(a => a.kkk == informno);//查不到可以为空
var storein= db.aaa.Single(a => a.kkk == informno);//必须有唯一的数据,否则引发异常。
跨Controllers传数据的更多相关文章
- apiCloud中api.ajax方法跨域传参获取数据
apiCloud中的ajax方法,可以自动处理跨域访问数据,不必使用jsonp来处理了. 使用ajax方法,必须要在apiready = function() {}方法中 获取参数 var pageP ...
- 关于试用jquery的jsonp实现ajax跨域请求数据的问题
我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...
- HTML5 postMessage 跨域交换数据
前言 之前简单讲解了利用script标签(jsonp)以及iframe标签(window.name.location.hash)来跨域交换数据,今天我们来学习一下HTML5的api,利用postMes ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- Android中实现跨app之间数据的暴露与接收
例如一个小项目:实现单词本的添加单词等功能 功能:不同的方式实现跨app之间数据的暴露与接收 暴露端app:实现单词的添加(Word.Translate),增删改查: 接收端app:模糊查询,得到暴露 ...
- Vue用axios跨域访问数据
Vue用axios跨域访问数据axios是vue-resource的替代品,vue-resource不再维护.安装axios:npm install axios使用vue-cli开发时,由于项目本身启 ...
- iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- android中用Intent传数据,如果用传递的是一个类,就将类实现Parcelable接口
Parcelable,内存单位,跨进程使用,或者intent传递对象的时候使用.android中用Intent传数据,如果用传递的是一个对象,就将对象实现Parcelable接口,而不是将对象序列化. ...
- Zabbix监控实现跨区域跨网络监控数据
Zabbix监控实现跨区域跨网络监控数据 环境: 公司现有服务器10台,其中5台服务器有一台安装了zabbix,并且这5台服务器处于一个网络,只有一台服务器有公网ip, 另外的5台处于另一个网络,仅有 ...
随机推荐
- various Sequence to Sequence Model
1. A basic LSTM encoder-decoder. Encoder: X 是 input sentence. C 是encoder 产生的最后一次的hidden state, 记作 C ...
- JS性能方面--内存管理及ECMAScript5 Object的新属性方法
Delete一个Object的属性会让此对象变慢(多耗费15倍的内存) var o = { x: 'y' }; delete o.x; //此时o会成一个慢对象 o.x; // var o = { x ...
- Ubuntu学习总结-04 搭建JAVA开发环境
JAVA开发环境是一种跨平台的程序设计语言,可以在windows.LINUX等操作系统上进行开发. 1 下载JDK 从以下地址下所需的jdk安装包 . http://www.oracle.com/te ...
- iOS - 沙盒中,如何判断存在文件、目录
在iOS开发中,在沙盒中创建沙盒一些存储各个功能的文件目录或者文件. 使用: [NSFileManager defaultManager] 1.判断目录,用她可以. 2.判断文件,用她可以. 3.创建 ...
- POJMatrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22058 Accepted: 8219 Descripti ...
- Raspberry Pi 3 FAQ --- connect automatically to 'mirrors.zju.edu.cn' when downloading and how to accelerate download
modify the software source: The software source is a place where several free application for linux ...
- Yocto开发笔记之《应用程序架构》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== Eclip ...
- UML活动图与流程图的区别
http://blog.chinaunix.net/uid-11572501-id-3847592.html UML活动图与流程图的区别 (1).流程图着重描述处理过程,它的主要控制结构是顺序.分支和 ...
- wcf第1步
添加System.ServiceModel 引用 Wcf 服务端 class Program { static void Main(string[] args) { ServiceHost host ...
- Python基本运算符
Python基本运算符 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 比较(即关系)运算符 ...