Я могу остановить пищевые идентификаторы.NET?

Помимо решений по замене строк, вы также можете взглянуть на Code.eval_string .

Таким образом, строка будет проанализирована, и вы получите список, который вы ищете;

{list, _} = Code.eval_string "[40.45694301152436, -3.6907402812214514]"
# {[40.45694301152436, -3.6907402812214514], []}

21
задан markedup 2 September 2008 в 08:09
поделиться

9 ответов

Короткий ответ не с веб-формами, идентификатор может всегда переписываться в зависимости от вложения элемента. Можно получить доступ к идентификатору через свойство ClientID, таким образом, Вы могли установить идентификаторы в переменные в сценарии в конце страницы/управления, тогда помещает их в jQuery.

что-то вроде этого:

<asp:button id="ImAButton" runat="server">Click Me</asp:button>

<script type="text/javascript">
var buttonId = "<%=ImAButton.ClientId%>";
$("#"+buttonId).bind('click', function() { alert('hi); });
</script>

Это - взлом, который я знаю, но это будет работать. (Я должен отметить непосвященным, я использую $ Прототипа, добираются идентификационным методом там)

25
ответ дан 29 November 2019 в 19:59
поделиться

Один метод должен переопределить идентификатор вручную:

public override string UniqueID
{
  get { return this.ID; }
}
public override string ClientID
{
  get { return this.ID; }
}

Rick Strahl записал сообщение в блоге еще с некоторой информацией о том подходе.

12
ответ дан 29 November 2019 в 19:59
поделиться

Взгляд на ASP.NET MVC - это обращается к иерархиям объектов излишества, которые ASP.NET генерирует по умолчанию.

Этот сайт записан в MVC (я думаю) - смотрят на, он - структура. Если бы я был работающий над новым проектом прямо сейчас, то я рассмотрел бы его сначала

, Если Вы застреваете с основным ASP.NET затем быть тщательным переопределением ClientID и UniqueID - это имеет тенденцию повреждать много веб-элементов управления.

лучший способ, которым я нашел, состоит в том, чтобы раздать нечитабельный ClientID к JavaScript.

7
ответ дан 29 November 2019 в 19:59
поделиться

Можно расширить средства управления .net и заставить их возвратить фактический идентификатор, когда связанные свойства называют.

ClientID является идентификационным атрибутом, и UniqueID является атрибутом имени элементов HTML. Таким образом, при создании текстового поля как следующее и использующий это вместо текстового поля в платформе Вы делаете идентификатор и называете рендеринг атрибутов как то же как идентификатор серверной стороны.

public class MyTextBox : TextBox
{
    public override string ClientID { get { return ID; } }
    public override string UniqueID { get { return ID; } }
}

Для использования этого нового пользовательского элемента управления в основном зарегистрируйте это управление, как Вы сделали бы для пользовательского пользовательского элемента управления (можно сделать, находится в web.config, таким образом, Вы не должны будете делать этого на всех своих страницах):

<%@ Register Assembly="MyLibrary" NameSpace="MyLibrary.WebControls" TagPrefix="MyPrefix" %>

И использование это как Вы использовало бы текстовое поле:

<MyPrefix:MyTextBox ID="sampleTextBox" runat="server" />
4
ответ дан 29 November 2019 в 19:59
поделиться

Лично, я использую ряд методов, я разработал для образования моста серверной стороны ASP.NET "волшебство" (я должен все же использовать MS материал MVC все же), и мой клиентский код из-за порчи идентификаторов, которая происходит. Вот просто тот, который может или не может оказаться полезным:

public void RegisterControlClientID(Control control)
{
   string variableDeclaration = string.Format("var {0} = \"{1}\";", control.ID, control.ClientID);
   ClientScript.RegisterClientScriptBlock(GetType(), control.ID, variableDeclaration, true);
}

Так, в Вашем серверном коде Вы просто называете это и передачу в экземпляре управления, для которого Вы хотите использовать более дружественное название. Другими словами, во время время проектирования , у Вас может быть текстовое поле с идентификатором "m_SomeTextBox", и Вы хотите быть в состоянии записать свой JavaScript с помощью того же самого имени - Вы просто назвали бы этот метод в своем серверном коде:

RegisterControlClientID(m_SomeTextBox);

И затем на клиенте следующее представляется:

var m_SomeTextBox = "ctl00_m_ContentPlaceHolder_m_SomeTextBox";

Тот способ, которым весь Ваш код JavaScript может быть довольно незнаком о том, что ASP.NET решает назвать переменной. Предоставленный, существуют некоторые протесты к этому, такой как тогда, когда у Вас есть несколько экземпляров управления на странице (из-за использования нескольких экземпляров пользовательских элементов управления, что у всех есть экземпляр m_SomeTextBox в них, например), но обычно этот метод может быть полезен для Ваших наиболее главных потребностей.

1
ответ дан 29 November 2019 в 19:59
поделиться

То, что я обычно делаю, создают общую функцию, которая получает название поля. Это добавляет обычный префикс "asp.net" и возвращает объект.

var elemPrefix = 'ctl00-ContentPlaceHolder-'; //replace the dashes for underscores

var o = function(name)
{    
    return document.getElementById(elemPrefix + name)
}

, С которым можно использовать этот вид вызовов в jQuery

$(o('buttonId')).bind('click', function() { alert('hi); });
1
ответ дан 29 November 2019 в 19:59
поделиться

Вы определенно не хотите к твердому коду asp.net-сгенерированный идентификатор в свой CSS, потому что это может измениться при реконструкции вещей на странице таким способом, которым изменяется дерево управления.

Вы правы, что идентификаторы CSS имеют свое место, таким образом, я проигнорировал бы предложения, чтобы просто использовать классы.

различные взломы JavaScript, описанные здесь, являются излишеством для небольшой проблемы. Так наследовался классу и переопределяет свойство ID. И, конечно, не полезно предложить переключиться на MVC, когда все, что Вы хотите сделать, осуществляют рефакторинг некоторый CSS.

Просто имеют отдельные отделения и промежутки, для которых Вы нацелены с CSS. Не будьте нацелены на средства управления ASP.NET непосредственно, если Вы захотите использовать идентификаторы.

  <div id="DataGridContainer">
     <asp:datagrid runat=server id="DataGrid" >
         ......
     <asp:datagrid>
  </div>
1
ответ дан 29 November 2019 в 19:59
поделиться

При использовании jQuery тогда, у Вас есть загрузки селекторы CSS и jQuery custome селекторы в Вашем распоряжении для предназначения для элементов на странице. Так вместо того, чтобы выбрать кнопку отправки он - идентификатор, Вы могли сделать что-то как:

$('fieldset > input[type="submit"]').click(function() {...});
0
ответ дан 29 November 2019 в 19:59
поделиться

Я вижу, что система .NET кажется менее интуитивной, но дайте ей шанс. По моему опыту, на самом деле это приводит к созданию более чистого кода. Конечно

<asp:button id="ImAButton" runat="server">Click Me</asp:button>

<script type="text/javascript">
var buttonId = <%=ImAButton.ClientId%>
$(buttonId).bind('click', function() { alert('hi); });
</script>

работает нормально. Но он страдает отсутствием модульности. На самом деле вам нужно что-то вроде этого:

<script type="text/javascript">
function MakeAClick(inid)
{
  $(inid).bind('click', function() { alert('hi); });
}
</script>

, а затем с вашим кодом на стороне java или на стороне C # вы вызываете MakeAClick. Конечно, на стороне C # это имеет больше смысла, вы просто указываете здесь ClientID.

Возможно, это настоящая проблема с кодом, который вы просматриваете.

0
ответ дан 29 November 2019 в 19:59
поделиться