关于.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 ...
随机推荐
- regex(python)
正则表达式 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/26 16:39 # @Author : jackendoff ...
- 计算文本长度-boundingRectWithSize
- (void)viewDidLoad { [super viewDidLoad]; //新建lable控件 UILabel *lable=[[UILabel alloc]init]; labl ...
- \_\_str\_\_和\_\_repr\_\_
目录 __str__和__repr__ 一.__str__ 二.repr __str__和__repr__ 一.__str__ 打印时触发 class Foo: pass obj = Foo() pr ...
- POJ-3264 Balanced Lineup(区间最值,线段树,RMQ)
http://poj.org/problem?id=3264 Time Limit: 5000MS Memory Limit: 65536K Description For the daily ...
- J. Stone game(背包问题)
题:https://nanti.jisuanke.com/t/41420 定义 dp[x][y] 表示第 x 个数到最后一个数能组成和为 y 的方案数 #include<bits/stdc++. ...
- Revit二次开发-获取材质的纹理贴图
通过IExportContext导出类中的Onmaterial()方法,可以获取到材质相关信息,主要是材质ID,再根据材质ID得到材质对象material,然后通过如下代码获取Asset对象: Ele ...
- 用@font-face应用自定义字体
@font-face格式 @font-face { font-family: <YourWebFontName>; src: <source> [<format>] ...
- 解决一个通过 WebReference 调用 WCF 时自定义 DataContract 类参数提交的问题
先看一下VS2013自动创建默认的IService1.vb,注意自定义的数据契约 CompositeType ' 注意: 使用上下文菜单上的“重命名”命令可以同时更改代码和配置文件中的接口名“ISer ...
- C# 将多个DataTable添加到指定的DataSet中
DataSet ds = new DataSet();//创建数据集 DataTable dt1=new DataTable(); //表1 DataTable dt2 = new DataTable ...
- [LC] 268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...