我的页面上有一个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?
由于
答案 0 :(得分:2)
您需要将Model.Language
放在双引号中以创建Javascript字符串文字。
您还应该致电Server.JavaScriptStringEncode
。