2013-10-16 64 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函数。这非常简单。表单本身会发布到需要明确命名的第三方页面。 –