跨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台处于另一个网络,仅有 ...
随机推荐
- CentOS关机
1. 关机前准备 1.1 查看有谁在线 who 1.2 查看网络联机状态 netstat -a 1.3 查看后台正在执行的程序 ps -aux 1.4 向所有在线用户发出警告信息 shutdown - ...
- CentOS关闭火狐浏览器Flash过期提示
关闭旧版插件屏蔽提示 打开 about:config?filter=extensions.blocklist.enabled 右键切换,关闭flash版本过旧被屏蔽的提示. 参考: http://ti ...
- CSS 公共样式分享
global.css | reset.css(格式化样式) common.css(公共组件样式) layout.css(当前页面样式) 清除全站所有页面的浏览器默认样式,保证在初始样式在所有浏览器下一 ...
- TypeScript Interface(接口)
类型检查专注于解析值所具有的"形态",这是TypeScript的核心原则之一.这个有时候被称为"duck typing"或者"structural s ...
- [转]Zookeeper原理及应用场景
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- 第三次作业——K米评测
第一部分 调研,评测 1.第一次上手体验 其实让我下载一个APP并且长期使用它是一件特别难的事情,不仅是因为占空间,需要注册个人信息,绑定账号,更是因为每款软件的功能虽然都很齐全,但是你并在没有真正用 ...
- 【Beta】团队协作模式探讨试行
概述 鉴于Alpha阶段松散的结构和低下的效率,以及Scrum会议时间过长.文档不到位.无标准化验收等问题,尝试对协作模式作一点变化. 依照课程压力等实际情况,以及按照贡献分分配原则,以一周为贡献分计 ...
- Linux/UNIX 定时任务 cron 详解
定时任务( job)被用于安排那些需要被周期性执行的命令.利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行.cron 是 Linux 或者类 Unix 系统中最为实用的工具之一 ...
- Java数据结构——哈希表
- js内存泄漏
IE和webkit浏览器都是采用计数来处理垃圾,也就是说每个对象被引用一次,该对象的计数器成员+1,如果计数器为0,那么这个对象被销毁 例如: function A() { var obj = {}; ...