2011年9月20日 星期二

為什麼 ASP.NET MVC 的JavaScriptResult變成下載,或輸出文字

在MVC中,可能想利用 return JavaScript("alert('Java script')") 來輸出一段程式,以便在Client端執行,但發現不是在網頁上直接輸出 「alert('Java script')」,就是變成「檔案下載」,這是因為使用return JavaScript("alert('Java script')") 預設的 Content-Type 是 application/x-javascript,依瀏覽器的解析,這是要找想對的應用程式來開啟,但又沒有指定副檔名,所以變成「文字輸出」或「檔案下載」。

如果是想在 Client端的瀏覽器上執行輸出的JavaScript,可以改用 return Content("alert('Java script')", "text/html"),利用 Content 來輸出,並將content-type設成 "text/html" 就可以如所想的執行了!

那一定有人會問return JavaScript("alert('Java script')") 要用在什麼地方? 即然它回應的是一組字串,就可以利用 AJAX 呼叫 Action,再執行回傳的Javascript (用 eval(指令字串))

其他用 return JavaScript(...) 只不過是預設 content-type,用 Content 反而有比較大的彈性!

1 則留言:

  1. Return Javascript(...) 應用上,應該會在前端使用 ajax.ActionLink(...) 來讀取,而非直接取得。

    回覆刪除