Передача данных из ViewModel в JavaScript - PullRequest
1 голос
/ 14 апреля 2011

На моей странице есть Ajax.BeginForm, который в случае успеха должен запустить функцию javascript. Я делал это раньше, и это работало нормально. Однако в сегодняшнем случае я хочу передать в свою функцию javascript некоторые переменные, которые я получаю из моей ViewModel:

Мой частичный вид:

@model MyProject.ViewModels.CategoryViewModel

@{
    var hasLang = Model.Language != "" ? Model.Language : "-1";
}


<script type="text/javascript">

function UpdateCategoryProgress() {
    console.log("this works");
    console.log(@hasLang);
    console.log("this doesn't works");
    if (@hasLang == "-1") {
        $.post('@Url.Action("CategoryProgress", "Home")', { categoryid: @(Model.Category.Id) }, function (data) {
            populateDiv($("#CategoryProgressWrapper"), data);
        });
    }
    else {
        $.post('@Url.Action("CategoryProgress", "Home")', { categoryid: @(Model.Category.Id), lang: @(hasLang) }, function (data) 
            populateDiv($("#CategoryProgressWrapper"), data);
        });
    }
}
</script>

<div id="editingContainer">
@using (Ajax.BeginForm("Edit", new AjaxOptions { UpdateTargetId = "featuresDiv", OnSuccess = "UpdateCategoryProgress" }))
{
 (code here)
)

Теперь, что интересно, код работает нормально. Функция запускается в случае успеха, однако в консоли отображается только первый файл console.log («это работает»). Все после этого просто игнорируется.

Я пытался использовать переменную hasLang, потому что, когда я выполнял следующее:

if (@Model.Language == "") {
    $.post('@Url.Action("CategoryProgress", "Home")', { categoryid: @(Model.Category.Id) }, function (data) {
        populateDiv($("#CategoryProgressWrapper"), data);
    });
}
else {
    $.post('@Url.Action("CategoryProgress", "Home")', { categoryid: @(Model.Category.Id), lang: @Model.Language }, function (data) {
        populateDiv($("#CategoryProgressWrapper"), data);
    });
}

Я получил бы ошибку в консоли firebug:

syntax error
if ( == "")

Он полностью игнорировал @Model.Language

Я также пытался передать его с помощью (), например: @(hasLang) или @(@Model.Language), но безуспешно.

Как я могу передать свой @Model.Language на мой jquery?

Спасибо

1 Ответ

2 голосов
/ 14 апреля 2011

Вам нужно поместить Model.Language в двойные кавычки, чтобы создать строковый литерал Javascript.

Вы также должны вызвать Server.JavaScriptStringEncode.

...