2012-03-12 29 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