关于.net MVC中主视图和分部视图的数据共享遇到的问题
今天在开发web时因为调用到的分部视图需要有个隐藏域。然后因为当我们第一次调用分部视图时,是用 @Html.Partial(“DetailDataPart”)在主视图里把它嵌进去主视图里的,这时它是不需要经过后台的,它会直接给你刷出分部视图来,我这里是DetailDataPart,所以它就直接把DetailDataPart视图显示出来,而不用经过controller里面的 ActionResult DetailDataPart()的,所以如果要给它初始化传参的话,在ActionResult DetailDataPart()里面写后传过去它是不会获取到的,我们需要在主视图里得到相应的值,然后传递给分部视图。
而我这个分部视图在后面一些操作时需要刷新它,所以它又会到后台去调用ActionResult DetailDataPart(),这时我们才需要在ActionResult DetailDataPart()里给赋获取相同的在主视图里要传给它的值。
接着问题就来了。。
一开始因为我需要给分部视图传两个参数,然后我又懒得再去建立什么实体类,于是就用了匿名类的写法,主视图的代码如下:
@Html.Partial("DetailDataPart", new { selectItem = ViewData["selectItem"], orgId = ViewData["orgId"] })
然后分部视图我获取参数的代码如下:
@if (Model != null)
{
selectItem Item = (selectItem)Model.selectItem;
var orgId = Model.orgId;
}
这样写显示是没问题的,问题出现在后台,我再次刷新时需要给它从后台传同样的两个参数,于是我的代码就如下:
return PartialView(new { selectItem = ItemInfo, orgId = orgId });
然后问题就来了,它第一次初始化显示没问题,能够显示出来;而当我后台获取值,重新刷新时,程序就会报错,提示说“object不包含selectItem的定义…”
最后通过跟同事讨论才知道,原来从后台那样传时,它会给我们把匿名类给定义成object类型,所以到前台才会一直报错。。
PartialView(object t)这是这个方法的定义。
所以我那样写的方法是不可行的,不能用匿名类传。
然后坑比的是今晚上网查资料时才了解到,主视图的ViewData数据跟分部视图是可以共享的!也就是说我在主视图的controller里定义了ViewData[“key”],那么在分部视图里我是可以直接使用ViewData[“key”]的
关于.net MVC中主视图和分部视图的数据共享遇到的问题的更多相关文章
- 关于mvc中传入DataTable到视图的应用
MVC 中 如果是多表连接查询出的数据需要重新定义一个ViewModel,觉得很是麻烦,所以可以通过传一个DataTable到视图中可以避免这个问题 但是不知道会有什么不好的地方,有这方面经验的大神有 ...
- ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
方式一: 数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递 前台接收显示数据视图View: <div style="height:300 ...
- MVC中从控制器到视图的数据传递方法汇总
1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...
- 在ASP.NET MVC中加载部分视图的方法及差别
在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...
- [转载]ASP.NET MVC 3的分部视图
1.什么是分部视图,我们应该什么时候应该用? 作为一个对ASP.NET MVC 模型很熟悉的开发者,他们自然想创建一个内容和代码都可以重用的组件,在web 窗体,我们可以创建一个web用户控件或web ...
- asp.net mvc视图中嵌套分部视图
asp.net mvc中Layout相当于webForm中母版页,分部视图相当于webForm中的用户控件. 下面例子是一个视图如何嵌套分部视图: A是分部视图,B是一般视图(A,B中的代码省略) 我 ...
- MVC中的分部视图
背景: 项目的工期马上就要到了,由于后台封装的很好,我们只需要用心熟悉框架,接下来后台的工作就是简单的代码工作了.原本以为最困难的时期已经过去,可没想到前台才是最困难的. B/S的基础十分薄弱,加上B ...
- MVC5中,加载分部视图,常见的方式
首先,新建一个MVC类型的Web项目: 然后在Model文件夹下定义一个Student实体: public class Student { public int ID { get; set; } pu ...
- ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...
随机推荐
- Educational Codeforces Round 80 (Rated for Div. 2)D E
D枚举子集 题:https://codeforces.com/contest/1288/problem/D题意:给定n个序列,每个序列m个数,求第i个和第j个序列组成b序列,b序列=max(a[i][ ...
- rsync实战(二)
加两个需求:1.增加一个模块2.每个模块不同的用户名 步骤: .修改配置文件/etc/rsyncd.conf [backup] comment = commit path = /backup auth ...
- ZJNU 1129 - The sum problem——中级
枚举区间可能的长度len,将m减去1~len构成的序列和后如果结果是len的倍数,则可以构成答案区间. /* Written By. StelaYuri */ #include<stdio.h& ...
- [WC2015]未来程序(提交答案)
sub1:ans=a*b%c,龟速乘即可. #include <stdio.h> #include <stdlib.h> unsigned long long a, b, c, ...
- C - The Battle of Chibi HDU - 5542 (树状数组+离散化)
Cao Cao made up a big army and was going to invade the whole South China. Yu Zhou was worried about ...
- day24-练习
#17.有四个数字:1 2 3 4 ,能组成多少个各不相同且数字不重复的三位数?各是多少? count = 0 for i in range(1,5): for j in range(1,5): fo ...
- getopt|sys|open|print文件|main()|if __name__ == "__main__"|getline()
#!/usr/bin/python import sys import getopt import re def compare(f1,f2,o1,o2,si_line): lines_count=0 ...
- VLC查看日志的方法
最近使用VLC去播放rtsp网络串流总是失败,显示要查看日志,查看的方法: 进入VLC的GUI,点击视图,添加界面,添加调试窗口: 添加调试窗口,会弹出界面: 上面会有报错的提示. 大佬如果有其他的办 ...
- webpack4的迁移
引用于https://www.jianshu.com/p/7ae252f27f09 感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader ...
- 复习break、continue、while、do-while的运用
一.复习: 循环.反复执行某段语句一种语法形式. 1.基本语法: for( 初始条件 ; 循环条件 ; 状态的改变 ) { 循环体 } 循环的四要素. 循环的执行过程.初始条件--循环条件--循环体- ...