1
我的页面上有一个Ajax.BeginForm,它的成功应该运行一个JavaScript函数。我以前做过,它工作得很好。 然而,在今天的情况下,我想通过我的JavaScript函数的一些变量,我从我的ViewModel获得:从ViewModel传递数据到javascript
我的部分观点:
@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?
感谢
Geez ...我甚至在我的另一页上做了这个......我怎么能不注意到这一点。谢谢!但是,为什么要调用@ Server.JavaScriptStringEncode? – LanFeusT 2011-04-14 03:17:04
@Lan:如果字符串有一个''''或一个换行符,否则你会有一个XSS漏洞。 – SLaks 2011-04-14 11:52:34