Как вызвать событие из элемента управления внутри GridView?

0

Я ищу правильный способ инициировать событие, которое сбросит мой текст ярлыка.

В моей GridView строка определена следующим образом:

<asp:TextBox ID="txtgvEmailAddress" Text = '<%# Eval("EMAIL")%>' runat="server" Width="200px" onclick="ResetMessage()"/>

Делая это, событие onclick выделяется сообщением о том, что onclick является недопустимым атрибутом для элемента "TextBox". Однако он отлично работает на странице. Но я хочу избавиться от этой ошибки и сделать это правильно.

GridView отображает таблицу.

Ниже приведена таблица:

<div>
<table cellspacing="0" id="MainContent_GridView1" style="border-collapse:collapse;">
    <tr>
        <th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$CustID&#39;)">Customer ID</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$CustFirstName&#39;)">First Name</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$CustLastName&#39;)">Last Name</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$CustCity&#39;)">City</a></th><th scope="col">Email</th>
    </tr><tr>
        <td>
          <span id="MainContent_GridView1_lblCustID_0">12</span>
        </td><td>
          <span id="MainContent_GridView1_lblFirstName_0">Anders</span>
        </td><td>
          <span id="MainContent_GridView1_lblLastName_0">Rohansen</span>
        </td><td>
         <span id="MainContent_GridView1_lblCity_0">Takoma Park</span>
       </td><td>
         <input name="ctl00$MainContent$GridView1$ctl02$txtEmail" type="text" value="[email protected]" id="MainContent_GridView1_txtEmail_0" />
          <span data-val-controltovalidate="MainContent_GridView1_txtEmail_0" data-val-errormessage="Must enter Email Address" data-val-validationGroup="grpEmail" id="MainContent_GridView1_ctl00_0" data-val="true" data-val-evaluationfunction="RequiredFieldValidatorEvaluateIsValid" data-val-initialvalue="" style="visibility:hidden;">Must enter Email Address</span>
           <input type="submit" name="ctl00$MainContent$GridView1$ctl02$btnUpdate" value="Update Email" onclick="return ValidateEmail(this);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$GridView1$ctl02$btnUpdate&quot;, &quot;&quot;, true, &quot;grpEmail&quot;, &quot;&quot;, false, false))" id="MainContent_GridView1_btnUpdate_0" ButtonType="Button" />

         </td>
    </tr><tr style="background-color:#EEEEEE;">
        <td>
          <span id="MainContent_GridView1_lblCustID_1">8</span>
        </td><td>
          <span id="MainContent_GridView1_lblFirstName_1">Deborah</span>
        </td><td>
          <span id="MainContent_GridView1_lblLastName_1">Damien</span>
        </td><td>
         <span id="MainContent_GridView1_lblCity_1">Fresno</span>
       </td><td>
         <input name="ctl00$MainContent$GridView1$ctl03$txtEmail" type="text" value="[email protected]" id="MainContent_GridView1_txtEmail_1" />
          <span data-val-controltovalidate="MainContent_GridView1_txtEmail_1" data-val-errormessage="Must enter Email Address" data-val-validationGroup="grpEmail" id="MainContent_GridView1_ctl00_1" data-val="true" data-val-evaluationfunction="RequiredFieldValidatorEvaluateIsValid" data-val-initialvalue="" style="visibility:hidden;">Must enter Email Address</span>
           <input type="submit" name="ctl00$MainContent$GridView1$ctl03$btnUpdate" value="Update Email" onclick="return ValidateEmail(this);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$GridView1$ctl03$btnUpdate&quot;, &quot;&quot;, true, &quot;grpEmail&quot;, &quot;&quot;, false, false))" id="MainContent_GridView1_btnUpdate_1" ButtonType="Button" />

         </td>
    </tr><tr>
        <td>
          <span id="MainContent_GridView1_lblCustID_2">7</span>
        </td><td>
          <span id="MainContent_GridView1_lblFirstName_2">Derek</span>
        </td><td>
          <span id="MainContent_GridView1_lblLastName_2">Chaddick</span>
        </td><td>
         <span id="MainContent_GridView1_lblCity_2">Fairfield</span>
       </td><td>
         <input name="ctl00$MainContent$GridView1$ctl04$txtEmail" type="text" value="[email protected]" id="MainContent_GridView1_txtEmail_2" />
          <span data-val-controltovalidate="MainContent_GridView1_txtEmail_2" data-val-errormessage="Must enter Email Address" data-val-validationGroup="grpEmail" id="MainContent_GridView1_ctl00_2" data-val="true" data-val-evaluationfunction="RequiredFieldValidatorEvaluateIsValid" data-val-initialvalue="" style="visibility:hidden;">Must enter Email Address</span>
           <input type="submit" name="ctl00$MainContent$GridView1$ctl04$btnUpdate" value="Update Email" onclick="return ValidateEmail(this);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$GridView1$ctl04$btnUpdate&quot;, &quot;&quot;, true, &quot;grpEmail&quot;, &quot;&quot;, false, false))" id="MainContent_GridView1_btnUpdate_2" ButtonType="Button" />

         </td>
    </tr>
</table>
 </div>

Каков наилучший способ сбросить ярлык, как только щелкнет поле электронной почты?

  • 0
    Так что все работает нормально, и все, что вам нужно, это просто не получить предупреждение?
  • 0
    Да, похоже на то, как я делаю это с помощью onclick определенного в текстовом поле, и предупреждает меня. Я ищу способ связать событие onclick со всеми текстовыми полями электронной почты, поэтому, когда я нажимаю на него, у меня та же функциональность, что и сейчас
Теги:
gridview

1 ответ

1
Лучший ответ

Немного удивительно, но это правильный способ сделать это. Вот несколько форм объяснения MSDN (на самом деле эта статья посвящена тому, что делает то же самое, но с другим контролем):

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

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

Если это не было внутри элемента управления, связанного с данными, более предпочтительным способом сделать это будет установка коллекции Attributes:

TextBox1.Attributes["onclick"]="ResetMessage();"; 

Но поскольку вы не можете получить свой контроль по ID напрямую, вы можете либо пойти с FindControl либо установить атрибут в разметке - оба являются хорошими вариантами.

Последний небольшой комментарий - добавьте точку с запятой в конец js.

  • 0
    Спасибо за хорошее объяснение, @Andrei. Я просто искал ответ везде.
  • 0
    @ eugene.it, пожалуйста, смотрите редактирование с дополнительной информацией по теме
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню