我有一个我称之为RenderPartial的视图。
在Partial usercontrol中,我设置了ViewData["IsTextAreaVisible"] = true;
在致电RenderPartial
后的我的视图中,我检查了ViewData["IsTextAreaVisible"]
的值。
即使usercontrol设置了它,View也认为它是null。
这是一个错误还是有更好的方法?
由于
答案 0 :(得分:3)
这是按设计工作的。
每个局部视图都有自己的视图数据副本,因此它所做的任何更改都不会污染原始视图。你想做什么,我们明确禁止。
答案 1 :(得分:1)
我认为RenderPartial方法实际上是从您将其作为ViewData传递的对象中生成一个新字典。由于字典不同,原始字体不会包含您添加到其中的任何新值。
在我看来,如果你可以计算你在partial中设置的值,你也应该能够在父视图中计算它。您可能想要考虑反转计算并在父视图中执行它并在调用partial之前添加它。您可以随时检查部分是否可用,如果未设置,则根据需要重新计算。
答案 2 :(得分:0)
视图组件之间的数据交换看起来像是设计错误。视图(全部或部分)只是被动地和愚蠢地显示模型状态。所有检查,调用和设置值都应在模型/控制器中完成。我建议你重新考虑一下你的架构。即使你现在看起来很好也很合适,你很可能迟早要重新设计这段代码。
答案 3 :(得分:0)
扩展Brad的说法,用JavaScript做客户端。使用JQuery,您可以查看页面上是否有任何可见的文本框,并启动客户端。
$(document).ready(function() {
if ($("input[@type=text]:visible").length > 0) {
// inject JS file and init tinyMCE.
$.getScript('<%= ResolveUrl("~/Scripts/tinymce/tiny_mce.js")' %>, function() {
// TODO: call tinyMCE's init function here
});
}
});
只有在有可见的输入时才会初始化它。
有关getScript
的限制,请参阅http://docs.jquery.com/Ajax/jQuery.getScript编辑:根据Jon的评论编辑扩展它。请注意,我没有在浏览器中运行此修订版编辑,因此可能会出现打嗝或两次打嗝。此外,如果你接受这个解决方案,这应该真的用jQuery重新标记。