По какой-то причине у меня возникают проблемы с присвоением 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печатается.Если я введу «.playerItem_hat» в атрибут «принять», он будет работать нормально.Но как только я использую @item внутри атрибута accept, кажется, что он не выбирает имя класса.Я вижу, что текст печатается в источнике, так что его определенно есть.Еще более странным является то, что, если я жестко закодирую 'item' в '.playerItem_hat', работает dropppable.Я сузил его до того момента, когда я использую ViewData ["itemType"].Я смотрел на некоторые другие темы, которые предлагают javascript.serialize, но, похоже, это отдельная проблема.
Есть ли что-то в жизненном цикле страницы, которую я пропускаю?Есть ли что-то, что может вызывать проблему при использовании ViewData внутри вызова jquery?Если бы текст вообще не печатался, я мог бы понять, но я вижу это там.Очень странно.
Кто-нибудь еще сталкивался с этой проблемой?
* Обновление *
Хорошо, так что, думаю, я понял проблему.Если кто-то еще сталкивается с этим, это кажется довольно простой ловушкой.
Код выше находится внутри страницы, которая вызывается через 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)
Это звучит правдоподобно?