关于.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 ...
随机推荐
- Java之常见异常
package com.atguigu.java1; import java.io.File;import java.io.FileInputStream;import java.util.Date; ...
- Python图形验证码识别
一,OCR OCR,即Optical Character Recognition,光学字符识别,通过扫描字符,分析形状,然后将其翻译成电子文本的过程.tesserocr是Python的一个OCR识别库 ...
- Java复习(二)类与对象的基本概念
2.1面向对象的程序设计方法概述 对象 程序中: 一切皆是对象 都具有标识,属性和行为 通过一个或多个变量来保存其状态 通过方法实现他的行为 类 将属性及行为相同或相似的对象归为一类 类可以看成是对象 ...
- 9.数据分组 group by
--数据分组 group by --作用:用于 对查询的数据进行分组,并处理 select deptno,job from emp group by deptno,job --1.分组之后,不能将除分 ...
- Linux基础篇三:文件系统
/bin 实际上是 /usr/bin /sbin 实际上是 /usr/sbin /usr/bin 里面的命令其实是依赖 /lib64 或者 /lib32 ldd /us ...
- 部署企业本地yum源及源码包安装
YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...
- 区别 new function(){} 和 function(){}()
只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...
- MAYA 卸载工具,完美彻底卸载清除干净maya各种残留注册表和文件
是不是遇到MAYA/CAD/3DSMAX/INVENTOR安装失败?AUTODESK系列软件着实令人头疼,MAYA/CAD/3DSMAX/INVENTOR安装失败之后不能完全卸载!!!(比如maya, ...
- Java IO: 并发IO
原文链接 作者: Jakob Jenkov 译者: 李璟 有时候你可能需要并发地处理输入和输出.换句话说,你可能有超过一个线程处理输入和产生输出.比如,你有一个程序需要处理磁盘上的大量文件,这个任务可 ...
- 查看github仓库的地址