2012-03-12 55 views
0

我有这样的MVC代码,并希望通过模型值@conversionModel.SourceFileName不幸的是,这段代码实际上并没有执行,什么正确的Razor语法将在我的情况?Razor的语法,代码没有在AjaxOptions中执行OnComplete

@Ajax.ActionLink("Remove file", "RemoveFile", "Converter", 
    new { id = @conversionModel.ProcessId }, 
    new AjaxOptions { 
    OnComplete = "RemoveFile(@conversionModel.SourceFileName);" 
    }) 

回答

0
@Ajax.ActionLink(
    "Remove file", 
    "RemoveFile", 
    "Converter", 
    new { 
     id = conversionModel.ProcessId 
    }, 
    new AjaxOptions { 
     OnComplete = string.Format(
      "RemoveFile({0})", 
      Json.Encode(conversionModel.SourceFileName) 
     ) 
    } 
) 
0

传递给“的onComplete”的字符串不被剃刀引擎解析,它的完成Ajax调用时执行的JavaScript的只是一个简单的字符串。

@Ajax.ActionLink("Remove file", "RemoveFile", "Converter", 
    new { id = @conversionModel.ProcessId }, 
    new AjaxOptions { 
     OnComplete = string.Format("RemoveFile({0})", Json.Encode(conversionModel.SourceFileName)) 
    }) 

更新:而不是只引用字符串,它应该使用Json.Encode作为Darin笔记进行编码。

+0

-1,如果路径中包含\字符,这对路径来说很可能会发生什么?这将打破JavaScript。将字符串传递给javascript函数的唯一可靠方法实际上是JSON对它们进行编码。 – 2012-03-12 08:24:29

+0

@DarinDimitrov感谢我的解决方案downvoting,因为它不包括任何可能性*没有*在OP的问题中提到。是否编码字符串从来没有在这里问过。它*值得注意(我相应地更新了我的答案)。但实际上*降低了我的解决方案,解决OP的最初问题是相当有问题的。 – 2012-03-12 08:33:52

+0

OP的原始问题是'RemoveFile' JavaScript从未被执行。它从来没有执行,因为他没有正确地编码作为参数传递的字符串,他得到了一个JavaScript错误。用你的初始解决方案,它是一样的:参数编码不正确。现在你已经修复了你的答案,我除去了我的downvote,只是现在你的答案看起来和我的一样。 – 2012-03-12 09:56:23