2011-04-14 119 views
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?

感谢

回答

2

你需要把Model.Language在双引号来创建一个JavaScript字符串文字。您也可以致电Server.JavaScriptStringEncode

+0

Geez ...我甚至在我的另一页上做了这个......我怎么能不注意到这一点。谢谢!但是,为什么要调用@ Server.JavaScriptStringEncode? – LanFeusT 2011-04-14 03:17:04

+1

@Lan:如果字符串有一个''''或一个换行符,否则你会有一个XSS漏洞。 – SLaks 2011-04-14 11:52:34