[英]ASP.NET inline server tags
我想首先說我的代碼工作正常,這更像是一個“如何做到最好”的問題。
所以我的.aspx
文件中有這樣的代碼:
function EditRelationship() {
var projects=<%= GetProjectsForEditRelationship() %>;
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
var rels=<%= GetRelationshipsForEditRelationship() %>;
// etc
}
再次,它工作正常。 問題是VS2008對這樣的代碼有點窒息,它強調了標簽中的<
字符(帶有相關警告),然后拒絕為其余的javascript提供代碼完成。 它也拒絕格式化我的文檔,給出解析錯誤 。 最后一部分是我最煩惱的事。
我可以把它們中的一些放進eval
,但是添加額外的圖層和運行時性能命中只是為了關閉VS,這似乎有點愚蠢,而且它並不總是一個選項(我不記得我的頭頂在哪里這不是一個選擇,但相信我,我有一個奇怪的結構)。
所以我的問題是, 你如何最好地寫這個 (哪里最好意味着VS投訴最少)? eval
和ajax調用都不適合這個imo。
您可以在代碼隱藏中從您的頁面執行此操作
ClientScript.RegisterArrayDeclaration("projects", "1, 2, 3, 4");
或者構建類似JSON的東西,你可以寫出來
ClientScript.RegisterClientScriptBlock(GetType(), "JSONDeclarations", "your json stuff");
更新根據我的評論
<script id="declaration" type="text/javascript">
var projects=<%= GetProjectsForEditRelationship() %>;
var rels=<%= GetRelationshipsForEditRelationship() %>;
</script>
<script type="text/javascript">
function EditRelationship() {
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
}
</script>
如果您的目標是減少VS投訴,並且如果您正在運行asp.net 4(支持靜態客戶端ID),那么像以下這樣的策略會更好嗎?
這比你的解決方案更多的工作,你將添加一些數據到回發(如果你執行任何)但它不會導致任何VS投訴我猜:)
最好的解決方案是將javascript放在一個單獨的文件中,並完全避免這種情況。 對於這個特定的功能,你正在做服務器端的工作。 為什么不構建你想要在代碼隱藏中動態添加的選項列表,將它們放在一個隱藏的div中,然后讓jQuery從已經呈現的HTML中添加它們?
如果您確實希望以這種方式動態創建很多javascript,請考慮在代碼隱藏中使用ScriptManager來設置您需要的變量作為腳本並注冊它們,然后您的內聯腳本將不需要轉義
ScriptManager.RegisterClientScript("projects = " + GetProductsForEditRelationship());
(基本上,這不是完整的語法,它取決於上下文)。 然后參考函數中的“項目”。
(編輯)
更大規模地執行此操作的一種更簡潔的方法,在代碼隱藏中設置您需要的所有內容:
string script = "var servervars = {" +
"GetProductsForEditRelationship: " + GetProductsForEditRelationship() +
"GetRelationshipsForEditRelationship: " + GetRelationshipsForEditRelationship() +
"}"
並指的是:
servervars.GetProductsForEditRelationship
當然,如果你這么做了很多,你可以創建一個類來自動構建腳本。
我沒有安裝VS2008進行測試,所以帶上一粒鹽,但你有沒有試過這樣的東西?
var projects = (<%= GetProjectsForEditRelationship() %>);
這樣的事情可能會欺騙JavaScript解析器忽略表達式的內容。
對於它的價值,VS2010正確解析並突出顯示您的原始代碼段。
是否可以將其移至VS2010? 我只是復制並粘貼了你的代碼,IDE正確地解釋了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.