2011-06-27 30 views
1

我有一個JavaScript文件,我包括動態ASP.NET MVC視圖。這個腳本設置了一些我希望從中獲得的值和HTML助手。如何將Asp.Net Server標記添加到JS並讓它們進行評估?

以下設置js變量等於包含'<%'的字符串。應如何格式化以便在包含此文件時評估服務器標記? 謝謝!

var testPortal = ns.TestPortal; 

testPortal.context = {}; 
testPortal.context.currentUserId = "<%= Html.GetCurrentUserId() %>"; 
testPortal.context.currentHwid = "<%=Model.Hwid %>"; 
testPortal.context.currentApplicationId = "<%= Html.GetCurrentApplicationId(Model.ProductName) %>"; 

更新

我試圖落實以下達林提供給我的解決方案。新動作正在運行(直接通過輸入url進行測試)。但是,當我嘗試在我的視圖上使用contentPlaceHolder創建腳本標記時,從不會調用該操作。腳本標記永遠不會添加到視圖中。

有人可以告訴我爲什麼這可能是?

<asp:Content ID="Content3" ContentPlaceHolderID="DynamicIncludes" runat="server"> 
    <script type="text/javascript" src="<%= Url.Action("Index","Context", new{applicationName = Model.ProductName, hwid = Model.Hwid}) %>"> 
    alert("helloo"); 
</script> 
    </asp:Content> 

爲什麼上面的腳本沒有被添加?

回答

3

您不能在靜態.js文件內使用服務器端包含如<% %>,這是因爲它們不由ASP.NET處理。你可以做的是定義一個控制器動作或一個自定義的Http處理器,它將設置響應Content-Type HTTP標題爲text/javascript,它可以爲動態內容提供服務。例如:

例如:

public ActionResult MyDynamicJs() 
{ 
    return View(); 
} 

和內部MyDynamicJs.aspx你可以使用服務器端代碼:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 
<% Response.ContentType = "text/javascript"; %> 
var testPortal = ns.TestPortal; 
testPortal.context = {}; 
testPortal.context.currentUserId = "<%= Html.GetCurrentUserId() %>"; 
testPortal.context.currentHwid = "<%=Model.Hwid %>"; 
testPortal.context.currentApplicationId = "<%= Html.GetCurrentApplicationId(Model.ProductName) %>"; 

現在,所有剩下的就是包括somwhere此控制器操作:

<script type="text/javascript" src="<%= Url.Action("MyDynamicJs", "SomeController") %>"></script> 
+0

我可以使用局部視圖來做你正在建議的內容嗎,並且不需要創建新的操作? – Nick

+0

@Nick,否,因爲無法直接訪問視圖(部分或不)。您始終需要控制器操作來提供視圖。 –

+0

我正在嘗試這個,但由於某種原因,新行爲似乎沒有被調用。我創建了一個名爲'context'的控制器,並擁有和稱爲'index'的操作。我在contentPlaceHolder中有以下腳本tage Nick

0

假設模型設置正確,並且您沒有對視圖執行一些非常奇怪的操作,那麼您應該能夠以這種方式填充JavaScript,因爲只有在發送到瀏覽器時它纔會被視爲JavaScript。

你從上面的代碼中得到了什麼錯誤或虛假?

相關問題