将数据从ViewModel传递到javascript

时间:2011-04-14 02:51:53

标签: jquery asp.net-mvc asp.net-mvc-3 razor viewmodel

我的页面上有一个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(“this works”)显示在控制台中。之后的一切都被忽略了。

我尝试过使用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 个答案:

答案 0 :(得分:2)

您需要将Model.Language放在双引号中以创建Javascript字符串文字。

您还应该致电Server.JavaScriptStringEncode