新足迹

 找回密码
 注册

精华好帖回顾

· 我的垃圾证书经历 (2008-10-1) Monica · 笑忘书——亲子关系和爸爸参与教育——完结 (2018-10-29) 小小白虎
· 印记*wall-Eの世界 (2011-1-29) 碧邪 · 悉尼宝宝大聚会暨摄影活动 –欢声笑语(老song 的 宝宝照片有更新,大家快来看啊) (2008-10-12) 老陶
Advertisement
Advertisement
查看: 1892|回复: 17

------- MVC里如果把iframe里的数据在submit时候传过来?------- [复制链接]

发表于 2012-10-24 11:14 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
主view里嵌入一个iframe,它的src就是一个action加载了嵌入的view。(这2个view的model是相同类型)


现在问题是submit的时候model在主view的controller里面是null,在嵌入view的controller里面model有、但所有属性都为空。


通常对于这样的iframe情况,我们是怎么提交的?是不是需要一个js在onclick的时候先把iframe里那些控件的value先写到主view里?


谢谢 !
Advertisement
Advertisement

发表于 2012-10-24 11:28 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
iframe 里加一个隐藏的 submit button, 主view 用 js trigger click event 单独submit 到它自己的 action

或者去掉 iframe, 用 partial view.

model 为 null 应该是另外一个问题,你用 post? 检查 formcollection.

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2 感谢分享

查看全部评分

发表于 2012-10-24 13:16 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2012-10-24 11:28
iframe 里加一个隐藏的 submit button, 主view 用 js trigger click event 单独submit 到它自己的 action

...

我尝试你的方法,主view的submit button onclick的时候找到iframe里的hidden button (也是submit) type,  然后用....click()来trigger。


但那个iframe里的button只能被运行客户端的代码(譬如js),但是无法call到control里定义的form submission方法。

发表于 2012-10-24 13:35 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
梦呓人 发表于 2012-10-24 13:16
我尝试你的方法,主view的submit button onclick的时候找到iframe里的hidden button (也是submit) type, ...

iframe 里的 view 你也有 @Html.BeginForm() 吧? 如果有,理论上任何一个 submit button 都会触发 form post 的。你也可以把route 写到 BeginForm(, , ,)里.

发表于 2012-10-24 16:46 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2012-10-24 13:35
iframe 里的 view 你也有 @Html.BeginForm() 吧? 如果有,理论上任何一个 submit button 都会触发 form  ...

后来不知道怎么就行了,呵呵



我现在是这么想:


主view用ajax.beginform(),然后在[httppost]的方法里call前台的那个js method (就是trigger iframe 的  submit), 这样一旦知道结果后我的主view就不用refresh,直接可以把结果显示在主view上。


现在的问题是:


1, ClientScript.RegisterStartupScript 好像在.net 4.0 & MVC不能用了,包括网上一些人说用HttpContext.CurrentHandler 来代替Page object也不行了,因为MVC有自己的handler。  那么什么办法还能从codebehind来call javascript的方法?


2,如果call了,因为它是非同步的,我怎么可以等(1)结束了再把结果信息返回到主view?




发表于 2012-10-24 17:33 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
可能是我理解有误,我觉得越弄越麻烦了,为什么要iframe?

如果目的是要用一个可以重复使用的form的话,可以做成了一个action/view的组合,partial view?类似于web form里面user control的东西)

在你的主view中,如果是razor的话,用@Html.action("<actionName>","<controllerName>", modelinstance).

如果主view有postback的话,跟button所在的form有关,跟这个child view没关系。

着手点:如果action的modelbinding有问题,第一个先用fiddler看你的 1. form   2. query string, 这东西在mvc中解释为RouteData




评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2

查看全部评分

Advertisement
Advertisement

发表于 2012-10-24 23:32 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
梦呓人 发表于 2012-10-24 16:46
后来不知道怎么就行了,呵呵

说实在的,我不是太明白你的意思。

但是不管iframe里外js谁控制谁,都没有问题. Ajax.beginform 就是一个标准的ajax, 有onsuccess, oncomplete 这样的callback, 和你用jQuery 是一样的,很好控制。

不过你的好像还是web form 的思路,要照他的套路打。凭心而论,ASP.NET MVC 其实用起来挺蹩脚,挺涩的,我自己不喜欢。我觉得做web, WCF 足够了,剩下的mvc 都多余,过于架构化,不灵活。

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2

查看全部评分

发表于 2012-10-25 11:06 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2012-10-24 23:32
说实在的,我不是太明白你的意思。

但是不管iframe里外js谁控制谁,都没有问题. Ajax.beginform 就是一 ...

我个人觉得mvc还行,在framework上写东西就得找规矩来,要莫用它默认的implementation,或者写自己的,mvc主体是 coding to interface, 这种灵活性在mvc的design 阶段就想到了.

最近两天没事在研究3的source code, 平时看crap code太多了,现在得清清脑子, 虽然只是开始,但感觉学到不少东西.

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2

查看全部评分

发表于 2012-10-25 11:16 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
无视 发表于 2012-10-25 11:06
我个人觉得mvc还行,在framework上写东西就得找规矩来,要莫用它默认的implementation,或者写自己的,mvc ...

我比较推崇 SOA 的架构,但是行业里都严格按照微软规范,特别推崇微软系认知的深度和新技术的广度,一点也不会出格,像机器人一样,还是廉价商业人力机器的考虑。

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2

查看全部评分

发表于 2012-10-25 11:26 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2012-10-25 11:16
我比较推崇 SOA 的架构,但是行业里都严格按照微软规范,特别推崇微软系认知的深度和新技术的广度,一点 ...

你把mvc当作是soa感觉就会好很多

评分

参与人数 1积分 +6 收起 理由
梦呓人 + 6 我更宁愿去拍座位对面那几个爆乳妹的白腿:).

查看全部评分

发表于 2012-10-25 11:35 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
无视 发表于 2012-10-24 17:33
可能是我理解有误,我觉得越弄越麻烦了,为什么要iframe?

如果目的是要用一个可以重复使用的form的话,可 ...

码兄,那个页面显示几十行的数据,本身一开始submit按钮在最底部,中间loop用partial view或者editfor template都很容易实现。


后来PM review了,他说“从用户使用角度他们不会喜欢一直拖动main scroll bar到底再submit”,于是乎,我被告知用iframe,为了让submit按钮就永远在主页面里,用户只要拖iframe scroll bar就可以了...


大哥你怎么看?
Advertisement
Advertisement

发表于 2012-10-25 11:36 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
无视 发表于 2012-10-25 11:06
我个人觉得mvc还行,在framework上写东西就得找规矩来,要莫用它默认的implementation,或者写自己的,mvc ...

现在做M$ WEB开发好像底线就是MVC3+Windsor了啊

发表于 2012-10-25 11:37 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不知不觉:  

您的用户组升级为 银靴族   看看我能做什么 ›  

评分

参与人数 1积分 +4 收起 理由
无视 + 4 这还用说么, 你懂的...

查看全部评分

发表于 2012-10-25 11:44 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
梦呓人 发表于 2012-10-25 11:35
码兄,那个页面显示几十行的数据,本身一开始submit按钮在最底部,中间loop用partial view或者editfor te ...

你可以方两个submit button, top bottom个一个,我个人觉得用iframe的design得需要一个很特别的理由。

发表于 2012-10-25 11:46 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
梦呓人 发表于 2012-10-25 11:36
现在做M$ WEB开发好像底线就是MVC3+Windsor了啊

没错,关键是可以写unit test了

发表于 2012-10-25 12:30 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
其实做 Web, 就应该是 Client end MVC --> JSON or JSONP --> RESTful, 我现在照猫画虎,PHP, Ruby on Rails , Node.js 都能做,很大同的感觉。Unit Test client end 写 client 的,server end 写 server 的。还有,MVC 和 web form 一样,输出还是不够简洁高效,不利于 team 分工。

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2 大牛

查看全部评分

Advertisement
Advertisement

发表于 2012-10-25 12:47 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2012-10-25 12:30
其实做 Web, 就应该是 Client end MVC --> JSON or JSONP --> RESTful, 我现在照猫画虎,PHP, Ruby on Rail ...

你的思路的确不错,client side mvc通吃,不管server side技术,这也是当下相当一部分mobile site agency策略.

但Tooling根不上,工业界就很难大面积接受,毕竟有这么多可选的方案,找一个开发效率高的,不需要很大学习曲线的替代品是分分种的事。

client side mvc维护起来那是相当的不容易,这个成本也得考虑。

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2 顶牛

查看全部评分

发表于 2012-10-25 13:25 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
无视 发表于 2012-10-25 11:44
你可以方两个submit button, top bottom个一个,我个人觉得用iframe的design得需要一个很特别的理由。 ...

拍大腿出决策的人觉得整个页面拖动不好看

评分

参与人数 1积分 +4 收起 理由
无视 + 4 自己大腿?

查看全部评分

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部