ViewData和javascript - 未读取类名

时间:2011-10-26 03:05:36

标签: jquery asp.net-mvc-3 razor droppable viewdata

出于某种原因,我无法将viewdata分配给某些javascript。

我有以下代码:

@{ 
string item = ".playerItem_" + ViewData["itemType"];
}

<script type="text/javascript">
 $(function () {

console.log(item);
$(".items.droppable").droppable({
                    accept: '@item',
                    drop: function (event, ui) {
                    //...
                    }
 });

});

</script>

如果我看一下控制台,我可以看到'.playerItem_hat'正在打印。如果我在'accept'属性中键入'.playerItem_hat',它可以正常工作。但是一旦我在accept属性中使用@item,它似乎就没有拿起类名。我可以看到文本在源中打印,所以它肯定存在。更奇怪的是,如果我将'item'硬编码为'.playerItem_hat',则droppable会起作用。每当我使用ViewData [“itemType”]时,我都会缩小范围。我看了一些其他建议javascript.serialize的帖子,但这似乎是一个单独的问题。

我是否遗漏了页面生命周期?通过在jquery调用中使用ViewData,是否有任何可能导致问题的原因?如果文字根本不打印,我可以理解,但我可以在那里看到它。很奇怪。

其他人遇到过这个问题吗?

* 更新*

好的,我想我已经找到了问题所在。如果有其他人遇到这个问题,那么这似乎是一个相当容易的陷阱。

上面的代码位于通过Html.Partial调用的页面内。上面的ViewData是我正在传递给页面的字符串,有5个不同的调用。

 Html.Partial("PageModules/Shared/ItemModule", Model, new ViewDataDictionary() {{"moduleType", "head"}})}

 Html.Partial("PageModules/Shared/ItemModule", Model, new ViewDataDictionary() {{"moduleType", "feet"}})}

 Html.Partial("PageModules/Shared/ItemModule", Model, new ViewDataDictionary() {{"moduleType", "hands"}})

等等。问题似乎是上面的代码生成了,但实际上没有输出到什么叫做输出流?换句话说,第一个调用生成html,然后第二个调用生成html,更改moduleType 的值。此时,html实际上还没有插入到包含这些部分调用的页面中。至少,据我所知,它是沿着这些方向发展的。

诀窍是强制它输出html,然后移动到下一个部分调用,并根据需要修改ViewData的值。我的解决方案是添加:

    @{ string itemBarHtml = Html.Partial("PageModules/Shared/GraphicalModuleBar", Model, new ViewDataDictionary() {{"moduleType", "head"}}).ToString();
     }

    @Html.Raw(itemBarHtml)

听起来有道理吗?

0 个答案:

没有答案