就我个人而言,我使用我开发的一组方法来桥接服务器端 ASP.NET “魔术”(我还没有使用 MS MVC 的东西)和我的客户端代码,因为发生的 ID 会发生变化. 这只是一个可能会或可能不会被证明有用的方法:
public void RegisterControlClientID(Control control)
{
string variableDeclaration = string.Format("var {0} = \"{1}\";", control.ID, control.ClientID);
ClientScript.RegisterClientScriptBlock(GetType(), control.ID, variableDeclaration, true);
}
因此,在您的服务器端代码中,您只需调用它并传入您想要为其使用更友好名称的控件实例。换句话说,在设计期间,您可能有一个 ID 为“m_SomeTextBox”的文本框,并且您希望能够使用相同的名称编写 JavaScript - 您只需在服务器端代码中调用此方法:
RegisterControlClientID(m_SomeTextBox);
然后在客户端上呈现以下内容:
var m_SomeTextBox = "ctl00_m_ContentPlaceHolder_m_SomeTextBox";
这样一来,您的所有 JavaScript 代码都可能完全不知道 ASP.NET 决定为变量命名的内容。当然,对此有一些注意事项,例如当您在页面上有多个控件实例时(例如,因为使用了多个用户控件实例,其中所有实例都具有 m_SomeTextBox 的实例),但通常这种方法可能对您最基本的需求有用。