2013-10-16 58 views
0

我有一個有幾個表單元素的asp.net頁面。如何停止自動生成id的asp.net?

<input type="hidden" id="myID" runat="server"/> 

我在服務器級別運行這些,因爲我需要爲它們分配值。

Asp.net引擎自動分配ID和名稱,覆蓋我指定的ID。

爲了我的應用程序的目的,我必須在這些領域有特定的ID。由於這是舊版本的.Net < 4我無法使用ClientIDMode =靜態值。

有無論如何,我可以強制靜態ID?

+1

否;該功能是ASP.Net 4.0的新功能。 – SLaks

+2

「爲了我的申請,我必須有特定的ID」,你能解釋一下這個要求嗎? – MikeSmithDev

+0

[在ASP.NET 3.5中使用ASP.NET 4功能「ClientIDMode」]的可能重複(http://stackoverflow.com/questions/9060905/use-asp-net-4-feature-clientidmode-in-asp-net -3-5) – MikeSmithDev

回答

3

分配靜態值的能力是.net 4.0版的新功能,但您可以獲取賦給控件的值並將其傳遞給JavaScript的其他位。

用你想要的IDsNames創建你自己的隱藏控件。在表單提交中使用一些簡單的JavaScript來將服務器端控件的值複製到控件中。

<form id="MyForm"> 
    <asp:TextBox ID=MyTextBox" runat="server" /> 
    <input type="hidden" id="MyFixedID" name="MyFixedName" /> 
    <asp:Button ID="MyButton" runat="server" Text="Go!" /> 
</form> 

function fred() { 
    $("#<%=MyButton.ClientID %>").Click(function() { 
     $("#MyFixedID").val($("#<%=MyTextBox.ClientID %>").val()); 
     $("#MyForm").submit() 
    }); 
} 

我也用ScriptManager.RegisterStartupScript()ScriptManager.RegisterClientScriptBlock()發射JavaScript和通過服務器側Control.ClientID作爲參數傳遞給一個<script>塊內定義的函數。

+2

出於某種原因,讓我大笑的是,你將這個任意JavaScript函數命名爲「fred」。 – jadarnel27

+1

基於20年前導師的長期命名慣例。任何名爲'「fred」'(文件,目錄,代碼等)都是暫時的,如果需要空間的話可以隨意刪除。我很少讓我使用「弗雷德」溢出到SO上。無意冒犯這個世界的弗雷德。 – andleer

+0

它不會將值傳遞給javascript或jquery函數。這非常簡單。表單本身會發布到需要明確命名的第三方頁面。 –