今天在开发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中主视图和分部视图的数据共享遇到的问题的更多相关文章

  1. 关于mvc中传入DataTable到视图的应用

    MVC 中 如果是多表连接查询出的数据需要重新定义一个ViewModel,觉得很是麻烦,所以可以通过传一个DataTable到视图中可以避免这个问题 但是不知道会有什么不好的地方,有这方面经验的大神有 ...

  2. ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式

    方式一: 数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递 前台接收显示数据视图View: <div style="height:300 ...

  3. MVC中从控制器到视图的数据传递方法汇总

    1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...

  4. 在ASP.NET MVC中加载部分视图的方法及差别

    在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...

  5. [转载]ASP.NET MVC 3的分部视图

    1.什么是分部视图,我们应该什么时候应该用? 作为一个对ASP.NET MVC 模型很熟悉的开发者,他们自然想创建一个内容和代码都可以重用的组件,在web 窗体,我们可以创建一个web用户控件或web ...

  6. asp.net mvc视图中嵌套分部视图

    asp.net mvc中Layout相当于webForm中母版页,分部视图相当于webForm中的用户控件. 下面例子是一个视图如何嵌套分部视图: A是分部视图,B是一般视图(A,B中的代码省略) 我 ...

  7. MVC中的分部视图

    背景: 项目的工期马上就要到了,由于后台封装的很好,我们只需要用心熟悉框架,接下来后台的工作就是简单的代码工作了.原本以为最困难的时期已经过去,可没想到前台才是最困难的. B/S的基础十分薄弱,加上B ...

  8. MVC5中,加载分部视图,常见的方式

    首先,新建一个MVC类型的Web项目: 然后在Model文件夹下定义一个Student实体: public class Student { public int ID { get; set; } pu ...

  9. ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...

随机推荐

  1. redhat下libreoffice 的安装

    1.第一次安装libreoffic时是用网络yum源安装的,但是装好之后不能用,找了好久没有找出问题,后来从官网下载安装包后安装就可以了. 下载地址:https://zh-cn.libreoffice ...

  2. Error running Tomcat8: Address localhost:1099 is already in use(IDEA错误)

    Error running Tomcat8: Address localhost:1099 is already in use(IDEA错误) 有时候运行web项目的时候会遇到 Error runni ...

  3. LeetCode No.100,101,102

    No.100 IsSameTree 相同的树 题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 输入: 1 1 / \ ...

  4. jeesite 去掉 /a

    1.修改 jeesite.properties文件 adminPath=/a为 adminPath= 2.修改 web.xml文件找到如下设置 <filter-mapping> <f ...

  5. VBA引用管理加载宏

    下载文件: VBA引用管理加载宏.rar 下载后,解压缩. Excel的 开发工具/加载项 在对话框中浏览 VBA引用管理.xlam VBA界面中,在工程右键菜单中出现:

  6. StartDT_AI_Lab | 开启“数据+算法”定义的新世界

    继「数据中台技术汇」栏目推出以来,获得了不少技术极客的喜爱.作为AI驱动的数据中台创导者,深度关注核心算法技术的自研创新.融合探索,故推出全新AI算法栏目「StartDT_AI_Lab」,主要介绍算法 ...

  7. Zabbix - 修改默认的 Web 访问URL

    背景 CentOS 7 64 Zabbix 4 LTS 使用RPM在线方式安装 修改过程 # 修改默认的访问路径:http://x.x.x.x/zabbix 修改为 http://x.x.x.x/ v ...

  8. 吴裕雄--天生自然 Hadoop大数据分布式处理:关闭CenterOS 7防火墙

    使用命令:systemctl status firewalld.service 查看防火墙状态 执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态 使用命令:syst ...

  9. vue element 全屏不好用问题

    Chrome71版本使用screenfull.js全屏功能时报参数错误   在生产环境长期使用的一个“全屏”功能突然失效了,查看Console 如下报错: Failed to execute 'req ...

  10. SecureCRT8.1安装破解

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 一.安装破解 [基本信息] SecureCRT v8.x 注册机,TEAM Z.W.T 出品,MD5 = 44114b9 ...