標籤:
在瀏覽器地址欄輸入地址,在頁面上想通過指令碼彈出一個框,看到Controller下有個JavaScript方法,返回的類型是JavaScriptResult,於是想用這個方法彈出框,
public ActionResult Index() { return this.JavaScript("<script>alert(“操作成功‘)</script>"); }
訪問頁面時,在Firefox上顯示的是js文本
在IE上是下載檔案
查看回應標頭資訊,Content Type 為application/x-javascript,返回的是js代碼。
所以,不能訪問頁面時使用this.JavaScript輸出指令碼,彈出提示框。
可以使用this.Content輸出指令碼,彈出提示框,像這樣
public ActionResult Index() { return this.Content("<script>alert(‘操作成功‘)</script>"); }
當然,也可以視圖頁面上寫js,同樣可以達到相同的效果。
那麼,JavaScriptResult怎樣用呢,可以在頁面上使用jQuery方法 getScript,向伺服器擷取js代碼,然後執行js代碼,所以服務端代碼就改成這樣
public ActionResult Index() { return this.JavaScript("alert(‘操作成功‘);"); }
注意的是,不需要加上<script>標籤,所以不要寫成this.JavaScript(“<script>alert(‘操作成功‘);</script>”)。
那麼在Index2頁面上這樣寫,請求/home/index
<script> $.getScript("/home/index"); </script>
最後訪問/home/index2頁面會彈出一個框
那麼this.Content和this.JavaScript有什麼不同
this.Content的傳回型別是ContentResult,this.JavaScript的傳回型別是JavaScriptResult,
反編譯ContentResult和JavaScriptResult,可以看到不同之處
JavaScriptResult設定ContetTypew為application/x-javascript,而ContentResult可以自訂ContentType,
既然這樣,可以使用this.Content(“alert(‘操作成功’)”,“application/x-javascript,”)代替this.JavaScript(“alert(‘操作成功’)”)
public ActionResult Index() { return this.JavaScript("alert(‘操作成功‘);"); } public ActionResult ReplaceContentMethod() { return this.Content("alert(‘操作成功‘);", "application/x-javascript"); }
然後在Index2頁面使用getScript分別請求/home/index ,/home/replacecontentmethod,看下效果
/home/index的回應標頭如下
/home/replacecontentmethod的回應標頭如下
可以看到,兩者是一樣的
ASP.NET MVC 中使用JavaScriptResult