Том, как используется AngularJS в ASP.NET текстовое поле с имея атрибут runat сервера
Hy guys can anyone tell how to do form validation with angularjs in asp.net (.aspx page Not MVC) i want to use runat="server" and angularjs bouth from form validation , can any one tell is it possible or not. if possible how to do this? What I have tried: Here is my code <div class="form-group col-md-6"> <label for="txtLanguage" data-ng-class="{ 'text-danger' : frmLanguage.LanguageName.$invalid && !frmLanguage.LanguageName.$pristine || frmLanguage.LanguageName.$error.minlength,'text-success':!frmLanguage.LanguageName.$pristine}">Language name</label> <input type="text" class="form-control" id="txtLanguage" name="LanguageName" data-ng-class="{ 'is-invalid' : frmLanguage.LanguageName.$invalid && !frmLanguage.LanguageName.$pristine,'is-valid' : !frmLanguage.LanguageName.$pristine }" data-ng-model="LanguageName" placeholder="Language" required runat="server" /> <p data-ng-show="frmLanguage.LanguageName.$invalid && !frmLanguage.LanguageName.$pristine && !frmLanguage.LanguageName.$error.minlength" class="invalid-feedback">Language is required!</p> </div> ========================== if i remove runat="server" from the textbox then my angularjs code is running . i want to use runat="server" and angularjs bouth from form validation , can any one tell is it possible or not. if possible how to do this?
F-ES Sitecore
Когда вы добавляете runat=server, идентификатор элемента может быть изменен, поэтому я предполагаю, что это будет ваша проблема. Вы можете дать ему идентификатор на стороне сервера "Textbox1", но идентификатор на стороне клиента будет другим, поэтому, если вы используете Textbox1 в качестве идентификатора в своем javascript, он не сможет найти ваш элемент управления.
Anilananda
На самом деле имя текстового поля получает изменение во время выполнения, из-за этого оно не приходит. Во время выполнения имя текстового поля name-это c100$txt1languagename, что-то вроде этого.
Это означает, что вместо LanguageName в качестве имени идентификатор текстового поля идет как имя с добавлением c100$ спереди.
alexvw
Привет,
Изменение, которое вы видите в идентификаторе вашего элемента управления, является стандартным поведением ASP.NET веб-формы. Его цель-убедиться, что ваши элементы управления имеют уникальный идентификатор.
Вы можете изменить это, установив свойство ClientIDMode на уровне страницы или элемента управления; например
Уровень Страницы:
&ЛТ;%@ заголовок страницы="TestPage" язык="C#" и masterpagefile вместе="~/UserMaster.мастер" AutoEventWireup значение="истинной" отделенного кода="тест.aspx-файл.КС" наследует=проект".тест" ClientIDMode="статический"%&ГТ;
уровень управления:
&ЛТ;АСП:текстовое поле с ID="txtLanguage" атрибут runat="сервер" ClientIDMode="статический"и GT;.
Осторожнее с этим! если вы настроите его на уровне страницы, то вам придется убедиться, что ваши элементы управления имеют уникальные идентификаторы, иначе никакой javascript не будет работать так, как ожидалось, потому что он не будет знать, как сказать, какой элемент управления вам нужен для работы.
Надеюсь, это поможет.
Anilananda
Вы правы, я внес изменения, теперь он работает, но все же есть одна проблема.
&ЛТ;АСП:текстовое поле с ID="txtLanguage" имя="язык" атрибут runat="сервер" ClientIDMode="статический"и GT;
В этом случае он не изменит идентификатор , но как насчет имени, Имя изменится как ctl00$ContentPlaceholder1$txt1language
.
Любое решение, чтобы сделать имя также статичным ?
alexvw
Привет Анилананда,
ClientIDMode = "Static" не достигает отображаемого имени элемента управления, поэтому вы можете увидеть "ctl00$ContentPlaceholder1$txt1language" на стороне клиента.
Существует метод, который я знаю, чтобы изменить его, но требует создания вашего собственного элемента управления, который должен наследовать соответствующий базовый класс, например TextBox, Lable и т. д.
В вашей реализации вам придется переопределить метод атрибутов (если я правильно помню), который их записывает. Там вам нужно будет обнаружить атрибут name и перезаписать или заменить его тем, который вы хотите.
У меня никогда не было времени вдаваться в такие подробности.
В любом случае, не пытайтесь заменить имена ваших элементов управления в объекте response, так как это приведет к аннулированию всех событий для указанных элементов управления.
Ваше здоровье!