вторник, 15 декабря 2015 г.

ASP.NET Изменение стандартных html элементов

Иногда при работе в ASP.NET требуется изменить стандартные элементы типа div, a, img и т.п. в коде C# или VB.NET. Например, изменить текстовое содержание или стиль. Сразу это выполнить не получится, необходимо этим элементам присвоить атрибут "выполнить на сервере". Выглядит это для ссылок так: <a id="WidgetImage_href" href="#1" runat="server" >




Рассмотрим простой пример. Есть форма. В ней находятся элементы div и другие, которые не привязаны к базе данных. Таким образом, в дизайнере формы мы видим реальную картину отображения шаблона на сайте. Это удобно. Кроме этого код получается более "чистым", т.е. свободным от вспомогательных элементов (смотрите выделение на картинке). Но нам необходимо изменить у картинки(img) ссылку на файл(src), добавить всплывающую подсказку (Alt).  Все это легко сделать из кода. Ниже указаны примеры на эту тему. P.S Post1 - это класс с набором данных полученных из базы данных или из интернета.

Public Sub FormView1_ItemCreated(sender As Object, e As EventArgsHandles FormView1.ItemCreated
           Dim Post1 As Post = DirectCast(sender, System.Web.UI.WebControls.FormView).DataItem
           ' ... Для других элементов CreateItem(sender.Row, Post1)
           Dim err As String = CreateItemByHtml(sender.Row, Post1)
           If err <> "" Then
               Response.Write(err)
           End If
 
      End Sub

Public Function CreateItemByHtml(item As Object, post1 As PostAs String
      ' Находим объекты из HtmlGenericControl
      Try
          ' Обработка картинок
          Dim img As HtmlImage = TryCast(item.FindControl("WidgetImage_src"), HtmlImage)
          If img IsNot Nothing Then
              img.Src = post1.Image
              img.Alt = post1.Caption
              'img.ViewStateMode = UI.ViewStateMode.Disabled
          End If
 
          ' Обработка ссылок
          For Each name1 As String In {"WidgetHeader""WidgetDate"}
              Dim c1 As HtmlAnchor = TryCast(item.FindControl(name1), HtmlAnchor)
              If c1 IsNot Nothing Then
                  c1.HRef = post1.Url
                  c1.Title = post1.Caption
                  'c1.ViewStateMode = UI.ViewStateMode.Disabled
                  Select Case name1
                      Case "WidgetDate" : c1.InnerText = post1.DateCreated.ToString("dd.MM.yyyy")
                      Case "WidgetHeader" : c1.InnerText = post1.Caption
                  End Select
              End If
          Next
          Return ""
      Catch ex As Exception
          Return ex.Message
      End Try
 
 
  End Function

Комментариев нет: