HTML-ТЭГ ClientID в проекте.NET

Используйте модель представления, которая содержит несколько моделей просмотров:

   namespace MyProject.Web.ViewModels
   {
      public class UserViewModel
      {
          public UserDto User { get; set; }
          public ProductDto Product { get; set; }
          public AddressDto Address { get; set; }
      }
   }

На ваш взгляд:

  @model MyProject.Web.ViewModels.UserViewModel

  @Html.LabelFor(model => model.User.UserName)
  @Html.LabelFor(model => model.Product.ProductName)
  @Html.LabelFor(model => model.Address.StreetName)
7
задан rslite 24 September 2008 в 06:22
поделиться

8 ответов

AFAIK там не является никаким путем.

Это показывает фактическое дерево управления, которое является в этом случае masterpage-content-control.

Однако, если Вы добавляете идентификатор к masterpage (это. Идентификатор = "безотносительно") затем Вы будете видеть то, "что" вместо ctl00 (что означает индекс 0 управления).

2
ответ дан 7 December 2019 в 07:53
поделиться

Это не возможно непосредственно. Вы могли сделать новое управление, которое наследовало ссылку, и переопределите ее ClientID для возврата непосредственно идентификатора. Но это, кажется, излишество. Можно просто использовать разметку HTML и использование <% # GetClass () %> для добавления класса при необходимости в нем.

Относительно использования ClientID для JavaScript:

<a ID="myLink" runat="server">....


var ctrl = document.getElementById('<%# myLink.ClientID %>');

Конечно, Вам нужен DataBind где-нибудь в коде.

4
ответ дан 7 December 2019 в 07:53
поделиться

Я просто обнаружил простой способ сделать это, если Вы используете jQuery.

var mangled_name = $("[id$=original_name]").attr("id");

Таким образом, если у Вас есть управление сервером как это:

<asp:TextBox ID="txtStartDate" runat="server" />

Можно получить скорректированное имя в jQuery/Javascript с:

var start_date_id = $("[id$=txtStartDate]").attr("id");

Так как это - строка, можно также использовать его "встроенный" вместо того, чтобы присвоить его, например, связать его с другими элементами для селекторов.

1
ответ дан 7 December 2019 в 07:53
поделиться

Я никогда не выяснял, как препятствовать тому, чтобы.NET делала это, но что я действительно начинал делать, помещал asp:Literals и использовал c#, чтобы добавить WebControl к ним. Если Вы пишете WebControl, можно установить различные свойства без него, получив уникальный идентификатор.NET. Например:

<asp:Literal ID="myLink" />

...

WebControl a = new WebControl(HtmlTextWriterTag.A);
a.CssClass = "active";
a.Attributes["href"] = "#";
Literal text = new Literal();
text.Text = "click here";
a.Controls.Add(text);
myLink.Controls.Add(a);

Который приведет к следующему HTML:

<a href="#" class="active">click here</a>

В целом, довольно грязное решение, но я не знал, что еще сделать, в то время и у меня был крайний срок для встречи.;)

0
ответ дан 7 December 2019 в 07:53
поделиться

Это сообщение в блоге могло быть полезным: Удалите Искажение Имени из Ведущих Страниц ASP.NET (верните свой идентификатор!)

Решение в сообщении перезаписывает .getElementById метод, позволяя Вам искать элемент просто с помощью нормального идентификатора. Возможно, можно адаптировать его к необходимости.

Отказ от ответственности: То поведение ASP.NET дизайном, и хорошо что путь, даже для Управления сервером HTML как управление в Вашем примере. Идентификатор сервера и клиентский идентификатор являются двумя совсем другими вещами, которые не должны быть смешаны. Используя Основные Страницы или Пользовательские элементы управления Вы могли закончить идентичными клиентскими идентификаторами, если бы не было того механизма.

0
ответ дан 7 December 2019 в 07:53
поделиться

Да точно мы должны будем сохранить исходный идентификатор по причинам CSS и JavaScript. Я заметил свойство ClientId, но это только для чтения и не может быть присвоено, таким образом, я не уверен, как я использовал бы его?

0
ответ дан 7 December 2019 в 07:53
поделиться

Я так не думаю.

Однако Вы, вероятно, хотите сохранить настоящее имя так, чтобы можно было управлять управлением с JavaScript...., если это так, необходимо изучить ClientID; это возвратит присвоенный идентификатор во времени выполнения.

Править:

Похоже, что существует способ сделать это, но с некоторой работой... смотрят на Средства управления ASP.NET - Улучшение автоматического идентификационного поколения: Изменения в архитектуре (Часть 3)

Я не прочитал полное сообщение, но похоже, что он создал свой собственный контейнер и собственного поставщика именования. Я думаю, что, если бы Вы хотели оставить имя своего управления нетронутым, Вы просто возвратились бы, имя въезжают задним ходом

public abstract string SetControlID(string name, System.Web.UI.Control control);
0
ответ дан 7 December 2019 в 07:53
поделиться

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

0
ответ дан 7 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: