[folha apoio] programação na internet

2
CSS Regra: Definição dos aspetos de estilo de um ou mais elementos Separada em duas partes: Seletor Tipo : elemento HTML Atributo Class: .ATRIBUTE_NAME Pode ser atribuído a múltiplos elementos ID: #ATRIBUTE_NAME (Unívoco) Contexto: Considera o contexto onde está definido Combinações entre si Bloco de Declarações: delimitado por chavetas, constituídas por declarações separadas por ; Declaração: define a propriedade de estilo é composta por duas partes: Propriedade : Valor É possível agrupar regras com declarações iguais para seletores diferentes: ex: h1,h2,h3{...} Um seletor pode ter mais do que uma declaração Folha de Estilo: Conjunto de uma ou mais regras a aplicar num documento HTML. Pode ser externa, local ao documento ou inline. No elemento <link> pode ser definido o atributo media que define os meios de visualização ao qual a style sheet deve ser aplicada Regras Inline: através do atributo style, aplicado a qualquer elemento do body, valido apenas ao elemento definido Existe herança de propriedades nos elementos HTML Um elemento pode redefinir propriedades herdadas Devido a eficiência e aspeto visual, há propriedades que não são herdadas como background JavaScript Tipos de Dados: Boolean : true, false Number : NaN, Infinity, undefined, null String Object Arrays: são objectos com a propriedade length (new Array([n])) Um objeto é um contentor de pares nome/valor ou seja é uma hashtable Suporta dois tipos de acesso: Subscript Notation ( [name] ), dot Notation (a chave deve ser válida, .name), notação literal ({name: ""}) Objetos Literais são a base do formato JSON Funções uma função é um objeto pode conter os seus próprios dados pode ter o papel de classe pode ser método variável this contem a referencia para o objeto usado para chamar a função. Numa chamada global, this é uma referencia para o Objecto Global operador new representa o objeto que foi criado Herança Baseada em protótipos Herança baseada em chamada à cadeia de funções construtoras As variáveis são definidas com a instrução var. Variáveis Global Variáveis Funções, quando definidas numa função, apenas são validas nesse contexto. Variáveis de função sem a declaração var, assume-se global. Variáveis não iniciadas assumem o valor undifined Suporte para chamadas recursivas, com cada chamada à função é criado novas variáveis nesse contexto. Closures Funções definidas dentro de funções. As variáveis são de acesso da própria closure Todas as funções retornam valor (undefined) DOM define como é que os documentos HTML e XML são representados Processamento de Eventos: Capture o evento percorre a árvore do documento até chegar ao elemento a que é destinado o evento Bubble O evento depois de processado, percorre a árvore ao contrário HTTP STATELESS Pedidos: GET: Pedido de Representação de um Recurso HEAD: Igual ao GET, mas não é enviado o corpo da resposta POST: Os dados vão no corpo do pedido PUT: Actualiza a representação de um recurso DELETE: Remove um recurso TRACE: Retorna o eco do pedido OPTIONS: retorna os métodos suportados Códigos de Resposta: 1xx: Informational 2xx: Success 3xx: Redirection 4xx: Client Error 5xx: Server Error Cookies Mecanismo que fornece a aplicações HTTP servidoras suporte para guardar e obter informações sobre o cliente Manutenção de informação sobre o estado do cliente Informação sobre o estado na forma nome=valor Uma resposta HTTP pode conter múltiplos cabeçalhos Set-Cookies Para apagar um cookie, envia-se um cookie com o mesmo nome e com data de expiração no passado Podem: criar sessões (conversação) Deixar registo de navegação Deixar Registo de Preferências Evitar Login(login automático) Não Podem: Aceder ao disco rígido Elnviar virus para o cliente Enviar informação para o servidor sem conhecimento do cliente JQUERY Uma framework em JavaScript função $() Os métodos retornam uma referencia para o aproprio objeto, permite encadeamento $.ajax( options ); ASP.NET HTTP PipeLine Pontos de extensibilidade HttpHandler HttpApplication HttpModule Custom Handlers Implementam a interface IHttpHandler (Void ProcessRequest(HttpContext context) e bool IsReusable{get}) Configuração via ficheiros de configuração Custom HttpApplication Definido através do ficheiro Global.asax Deriva de System.Web.HttpApplication Atendimento de pedido Receção de pedido Autenticação e Autorização Verificação de existência de resposta em cache Resolução URL->handler Aquisição de estado de conversação Execução de handler para produção de resposta Atualização do estado de conversação Atualização da cache com resposta Fim de atendimento Envio de resposta para o cliente Eventos implícitos A maioria dos pedidos ocorrem em cada pedido, excepto Error e Disposed Costum Modules Define novos nós da cadeia de atendimento Implementam a interface IHttpModule (Init, Dispose) Cadeia especificada através de ficheiros de configuração Pooling Módulos são reutilizáveis HttpContext Contem a informação do pedido Gestão de estado Estado da Aplicação: Read-Only Estado de Conversação (Sessão): Suportado pelo módulo SessionStateModule Realização condicional da aquisição e libertação IReqireSessionState IReadOnlySessionState HTTP Pipeline Maximização do paralelismo através da redução da partilha de instâncias A cada pedido é atribuída uma nova cadeia de atendimento, com inicio em HttpApplication Técnicas Usadas Instance Pooling: Conjunto de instâncias equivalentes Dimensão do conjunto <= dimensão do ThreadPool Caching Onde são usadas Instance Pooling para instâncias de HttpApplication Caching para os restantes elementos do pipeline ASP.NET WebForms Suportados por dois modelos de codificação: inline Code-Behind ASP.NET Custom Controls Uma página é um controlo Um controlo pode ter controlos filhos Uma página ASP.NET é uma classe derivada de System.Web.UI.Page e contem controlos ASP.NET Manutenção de Estado(através de cookies) Tipos de estado: Application Session Cookie View Não é fiável (não é reciclado) Partilhado pelas instâncias de HttpApplication Representado por um contentor associativo Protege acesso à coleção de objetos através de uma instância de HttpApplicationSateLock (semântica de leitores escritores) O estado de aplicação é vocacionado para dados com leituras frequentes ASP.NET Construção de Aplicações Web Databinding Associação de dados a controlos gráficos Implementa o padrão MVC Três aspetos Associação baseada em fontes de dados Coleções, Dicionários, Arrays, IdataReader Controlos que representam fontes de dados suporte databinding, lista iterativos Expressões de dataBind Datasourse, Datamember,DataTextField,DataValueField DataSourceControl Realizam uma abstração da fonte de dados Definição da fonte de dados Ajax Utiliza HTML e CSS para apresentação de conteúdo Utiliza DOM para oferecer páginas interativas e dinâmicas Utiliza XML para trocar dados Trocas assíncrono através do objeto XMLHttpRequest Utiliza Javascript Vantagens Aumento da usabilidade de aplicações WEB Aplicações mais ricas sem recorrer a plugins Aplicações requerem menos largura de banda Interface responde mais rapidamente Desvantagens O Suporte depende de cada browser O Botão back não funciona como esperado O URI não se altera com a alteração do estado da aplicação O recurso ao javascript aumenta o processamento no cliente Os pedidos apenas podem ser endereçados ao domínio onde foi originado o pedido original Debug de código mais dificil XMLHttpRequest Objecto Javascript Envia pedidos HTTP Recebe respostas a esses pedidos Efetua analise da resposta da resposta Depende de cada browser Estados (readyState): 0: Unset 1: Opened 2: Headers Received 3: Loading 4: Complete responseText Tem o conteudo do corpo da mensagem responseXML tem formato XML é feito parsing sobre a resposta resultado do objeto implementa Document caso contrario o valor é null Suporte a pedidos sincronos boolean assyn = true : o metodo send não é bloqueante boolean assyn = false : o metodo send é bloqueante metodo abort, aborta um pedido JSON formato text interpretado independente da linguagem troca de dados hashtable ou array using System; using System.Web; namespace ns { public class ExampleModule : IHttpModule { public void Init(HttpApplication app) { // Register our event handler with Application object. app.AuthenticateRequest += new EventHandler (this.Auth) ; } public void Dispose() { } private void Auth(object r_objSender, EventArgs r_objEventArgs) { // Code goes here } }} <httpModules> <add type="ns.ExampleModule" name="modulename" /> </httpModules> public class MvcApplication : System.Web.HttpApplication{ public static void RegisterRoutes (RouteCollection routes){ routes.IgnoreRoute ({resource}.axd/ {*pathInfo}); routes.MapRoute( “Default”, {controller}/{action}/{id}, new { controller = “Main”, action = “Index”, id = “” } ); } protected void Application_Start(){ RegisterRoutes(RouteTable.Routes); } } Jquery $.post(url [,{params}][,function(){}][,dataType]) $.get(url [,{params}][,function(){}][,dataType]) $.getJSON(url [,{params}][,function(){}][,dataType]) $.getScript(url[,function(){}][,dataType]) $("MYDIV").each( function(){} ) $.each( collection, function(){} ) $("MYDIV").empty() Controlador public class HomeController : Controller { public ActionResult Index() { return View(); } } specifies a Uniform Resource Locator (URL), the syntax and semantics of formalized information for location and access of resources on the Internet. CGI Para cada URL definir um CGI. Podem ser desenvolvidos em qualquer linguagem que suporte acesso às variáveis de ambiente stdin e stdout. Cada pedido equivale a um processo novo.

Upload: nuno-cancelo

Post on 06-May-2015

356 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: [Folha apoio]   programação na internet

CSSRegra: Definição dos aspetos de estilo de um ou mais elementos Separada em duas partes:Seletor• Tipo : elemento HTML• Atributo Class: .ATRIBUTE_NAMEPode ser atribuído a múltiplos elementos• ID: #ATRIBUTE_NAME (Unívoco)• Contexto: Considera o contexto onde está definidoCombinações entre si• Bloco de Declarações: delimitado por chavetas, constituídas por declarações separadas por ;• Declaração: define a propriedade de estilo é composta por duas partes:• Propriedade : Valor É possível agrupar regras com declarações iguais para seletores diferentes: ex: h1,h2,h3{...} Um seletor pode ter mais do que uma declaração • Folha de Estilo: Conjunto de uma ou mais regras a aplicar num documento HTML. Pode ser externa, local ao documento ou inline. No elemento <link> pode ser definido o atributo media que define os meios de visualização ao qual a style sheet deve ser aplicada• Regras Inline:através do atributo style, aplicado a qualquer elemento do body, valido apenas ao elemento definido• Existe herança de propriedades nos elementos HTML Um elemento pode redefinir propriedades herdadas Devido a eficiência e aspeto visual, há propriedades que não são herdadas como backgroundJavaScript• Tipos de Dados: Boolean : true, false Number : NaN, Infinity, undefined, null String Object Arrays: são objectos com a propriedade length (new Array([n]))• Um objeto é um contentor de pares nome/valor ou seja é uma hashtable• Suporta dois tipos de acesso: Subscript Notation ( [name] ), dot Notation (a chave deve ser válida, .name), notação literal ({name: ""})• Objetos Literais são a base do formato JSONFunções• uma função é um objeto• pode conter os seus próprios dados • pode ter o papel de classe• pode ser método• variável this contem a referencia para o objeto usado para chamar a função. Numa chamada global, this é uma referencia para o Objecto Global• operador new representa o objeto que foi criadoHerança Baseada em protótiposHerança baseada em chamada à cadeia de funções construtorasAs variáveis são definidas com a instrução var.• Variáveis Global• Variáveis Funções, quando definidas numa função, apenas são validas nesse contexto. Variáveis de função sem a declaração var, assume-se global.• Variáveis não iniciadas assumem o valor undifined• Suporte para chamadas recursivas, com cada chamada à função é criado novas variáveis nesse contexto.Closures• Funções definidas dentro de funções.• As variáveis são de acesso da própria closure• Todas as funções retornam valor (undefined)DOMdefine como é que os documentos HTML e XML são representados• Processamento de Eventos:• Capture o evento percorre a árvore do documento até chegar ao elemento a que é destinado o evento• Bubble O evento depois de processado, percorre a árvore ao contrário HTTP• STATELESS• Pedidos: GET: Pedido de Representação de um Recurso HEAD: Igual ao GET, mas não é enviado o corpo da resposta POST: Os dados vão no corpo do pedido PUT: Actualiza a representação de um recurso DELETE: Remove um recurso TRACE: Retorna o eco do pedido OPTIONS: retorna os métodos suportados• Códigos de Resposta: 1xx: Informational 2xx: Success 3xx: Redirection 4xx: Client Error 5xx: Server ErrorCookies• Mecanismo que fornece a aplicações HTTP servidoras suporte para guardar e obter informações sobre o cliente• Manutenção de informação sobre o estado do cliente• Informação sobre o estado na forma nome=valor• Uma resposta HTTP pode conter múltiplos cabeçalhos Set-Cookies• Para apagar um cookie, envia-se um cookie com o mesmo nome e com data de expiração no passado• Podem:• criar sessões (conversação)• Deixar registo de navegação

• Deixar Registo de Preferências• Evitar Login(login automático)• Não Podem:• Aceder ao disco rígido• Elnviar virus para o cliente• Enviar informação para o servidor sem conhecimento do clienteJQUERY• Uma framework em JavaScript• função $()• Os métodos retornam uma referencia para o aproprio objeto, permite encadeamento• $.ajax( options ); ASP.NET HTTP PipeLinePontos de extensibilidade• HttpHandler• HttpApplication• HttpModule• Custom HandlersImplementam a interface IHttpHandler (Void ProcessRequest(HttpContext context) e bool IsReusable{get})• Configuração via ficheiros de configuração• Custom HttpApplication• Definido através do ficheiro Global.asax• Deriva de System.Web.HttpApplication• Atendimento de pedido• Receção de pedido• Autenticação e Autorização• Verificação de existência de resposta em cache• Resolução URL->handler• Aquisição de estado de conversação• Execução de handler para produção de resposta• Atualização do estado de conversação• Atualização da cache com resposta• Fim de atendimento• Envio de resposta para o cliente• Eventos implícitos• A maioria dos pedidos ocorrem em cada pedido, excepto Error e Disposed• Costum ModulesDefine novos nós da cadeia de atendimentoImplementam a interface IHttpModule (Init, Dispose)Cadeia especificada através de ficheiros de configuração• PoolingMódulos são reutilizáveis• HttpContextContem a informação do pedido• Gestão de estadoEstado da Aplicação: Read-OnlyEstado de Conversação (Sessão): Suportado pelo módulo SessionStateModuleRealização condicional da aquisição e libertaçãoIReqireSessionStateIReadOnlySessionStateHTTP Pipeline• Maximização do paralelismo através da redução da partilha de instâncias• A cada pedido é atribuída uma nova cadeia de atendimento, com inicio em HttpApplication• Técnicas UsadasInstance Pooling:Conjunto de instâncias equivalentesDimensão do conjunto <= dimensão do ThreadPool• CachingOnde são usadas Instance Pooling para instâncias de HttpApplicationCaching para os restantes elementos do pipeline

ASP.NET WebFormsSuportados por dois modelos de codificação: inline Code-Behind ASP.NET Custom Controls• Uma página é um controlo• Um controlo pode ter controlos filhos• Uma página ASP.NET é uma classe derivada de System.Web.UI.Page e contem controlos ASP.NET Manutenção de Estado(através de cookies)Tipos de estado:• Application• Session• Cookie• ViewNão é fiável (não é reciclado)Partilhado pelas instâncias de HttpApplicationRepresentado por um contentor associativoProtege acesso à coleção de objetos através de uma instância de HttpApplicationSateLock (semântica de leitores escritores)O estado de aplicação é vocacionado para dados com leituras frequentes ASP.NET Construção de Aplicações WebDatabinding• Associação de dados a controlos gráficos• Implementa o padrão MVCTrês aspetos• Associação baseada em fontes de dadosColeções, Dicionários, Arrays, IdataReader• Controlos que representam fontes de dadossuporte databinding, lista iterativos• Expressões de dataBind Datasourse, Datamember,DataTextField,DataValueField• DataSourceControlRealizam uma abstração da fonte de dadosDefinição da fonte de dados

Ajax• Utiliza HTML e CSS para apresentação de conteúdo• Utiliza DOM para oferecer páginas interativas e dinâmicas• Utiliza XML para trocar dados• Trocas assíncrono através do objeto XMLHttpRequest• Utiliza JavascriptVantagens• Aumento da usabilidade de aplicações WEB• Aplicações mais ricas sem recorrer a plugins• Aplicações requerem menos largura de banda• Interface responde mais rapidamenteDesvantagens• O Suporte depende de cada browser• O Botão back não funciona como esperado• O URI não se altera com a alteração do estado da aplicação• O recurso ao javascript aumenta o processamento no cliente• Os pedidos apenas podem ser endereçados ao domínio onde foi originado o pedido original• Debug de código mais dificilXMLHttpRequestObjecto Javascript• Envia pedidos HTTP• Recebe respostas a esses pedidos• Efetua analise da resposta da resposta• Depende de cada browser• Estados (readyState): 0: Unset 1: Opened 2: Headers Received 3: Loading 4: CompleteresponseTextTem o conteudo do corpo da mensagemresponseXMLtem formato XMLé feito parsing sobre a respostaresultado do objeto implementa Documentcaso contrario o valor é nullSuporte a pedidos sincronos• boolean assyn = true : o metodo send não é bloqueante• boolean assyn = false : o metodo send é bloqueante• metodo abort, aborta um pedidoJSONformato text interpretado independente da linguagemtroca de dadoshashtable ou array

using System; using System.Web;namespace ns {public class ExampleModule : IHttpModule { public void Init(HttpApplication app) { // Register our event handler with Application object.app.AuthenticateRequest += new EventHandler (this.Auth) ;}public void Dispose() { }private void Auth(object r_objSender, EventArgs r_objEventArgs) { // Code goes here } }}<httpModules><add type="ns.ExampleModule" name="modulename" /></httpModules> public class MvcApplication : System.Web.HttpApplication{ public static void RegisterRoutes (RouteCollection routes){ routes.IgnoreRoute (“{resource}.axd/{*pathInfo}”); routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Main”, action = “Index”, id = “” } ); } protected void Application_Start(){ RegisterRoutes(RouteTable.Routes); } } Jquery$.post(url [,{params}][,function(){}][,dataType])$.get(url [,{params}][,function(){}][,dataType])$.getJSON(url [,{params}][,function(){}][,dataType])$.getScript(url[,function(){}][,dataType])$("MYDIV").each( function(){} )$.each( collection, function(){} )$("MYDIV").empty()Controladorpublic class HomeController : Controller{ public ActionResult Index() { return View(); }}specifies a Uniform Resource Locator (URL), the syntax and semantics of formalized information for location and access of resources on the Internet.CGIPara cada URL definir um CGI. Podem ser desenvolvidos em qualquer linguagem que suporte acesso às variáveis de ambiente stdin e stdout. Cada pedido equivale a um processo novo.

Page 2: [Folha apoio]   programação na internet

TextArea, TextBox, BeginForm, RenderAction, RenderRoute, RenderPartial)ModelBinding ordem atribuição de valores: Form (POST), RouteData, QueryString.Excluir model binding [Bind(Include=”Email”)] ASP.NET – MVC ModelStateO ModelState guarda informação acerca de valores de entrada, bem como, respectivos erros de validação. Definir erros manualmente ModelState.AddModelError(“elem”,”msg”)). Caso ModelState.IsValid retorne false então direcciona-se para a mesma View, com info. do erro (Html.ValidationSummary ou ValidationError(“elem”)).

function HttpRequest(handlerClass, handlerUrl, gName, playerId) { var xhr; var _args = arguments; this.Request = function() { xhr = new XMLHttpRequest(); var data = ""; for (var i=4;i<_args.length;i+= 2){ data+="&"+_args[i]+"="+(_args[i+1]); var gChannel = “../”+URL+“.ashx”+data xhr.open("GET", gChannel, false); xhr.send(); if (xhr.status != 200) throw (xhr.responseText); } this.isTrue = function() { return xhr.responseText == "True";} this.isFalse = function() { return !this.isTrue(); } this.getJSonObject = function() { var jSon = xhr.responseText; if (jSon.length > 0) jSon = "(" + jSon + ")"; return eval(jSon); } this.getResponseText = function(){ return xhr.responseText; }}

$(function () {$("#tags").keypress(function () { var url = "/CUF/Official/SearchTags?SearchValue=" + $("#tags").val(); $.get(url, function (tagsList) { $("#tags").autocomplete({ source: tagsList }); }); });});

public JsonResult Owner(){ User u = null; if (this.HttpContext.User.Identity.IsAuthenticated) { String auth = HttpContext.User.Identity.Name; u = UserService.GetUserByAutenticationString(auth); }return Json(u,JsonRequestBehavior.AllowGet);}COMMON JQUERY SELECTOR• element by id: $("#ElementID").whatever();• element by class: $(".ClassName").whatever();• get elements where id contains a string: $("[id*='value']").whatever();• get elements where id starts with a string $("[id^='value']").whatever();• get elements where id ends with a string $("[id$='value']").whatever();• get all elements of certain type (can use "p", "a", "div" - any html tag) $("div").whatever();JQUERY TOGGLE/SHOW/HIDE• toggle hide/show of an element $("#DivID").toggle(1000);• do something when animation is complete $("#DivID").toggle(1000, function () {});• hide an element $("#DivID").hide(1000);• do something when animation is complete $("#DivID").hide(1000, function () {});• show an element $("#DivID").show(1000);• do something when animation is complete $("#DivID").show(1000, function () {});JQUERY SLIDE - SLIDE AN ELEMENT IN AND OUT• toggle slide up and down $("#DivID").slideToggle(1000);• do something when animation complete $("#DivID").slideToggle(1000, function () {});• slide up $("#DivID").slideUp(1000);• do something when animation is complete $("#DivID").slideUp(1000, function () {});

• slide down $("#DivID").slideDown(1000);• do something when animation is complete $("#DivID").slideDown(1000, function () {});JQUERY FADE - FADE AN ELEMENT IN, OUT & TO• fade in $("#DivID").fadeIn(1000);• do something when animation complete $("#DivID").fadeIn(1000, function () {});• fade out $("#DivID").fadeOut(1000);• do something when animation is complete $("#DivID").fadeOut(1000, function () {});• fade to (fades to specified opacity) $("#DivID").fadeTo(1000, 0.25);• do something when animation is complete $("#DivID").fadeTo(1000, 0.25, function () {});ADD & REMOVE CSS CLASSES • add css class $("#DivID").addClass("newclassname");• remove css class $("#DivID").removeClass("classname");• add & remove class together $("#DivID").removeClass("class") .addClass("newclassname");• add & remove multiple classes $("#DivID") .removeClass("classname classname2") .addClass("newclassname newclassname2");GET & SET TEXTBOX VALUE• get the value of a textbox var TextboxValue = $("#TextboxID").val();• set the value of a textbox $("#TextboxID").val("New Textbox Value Here");GET & SET HTML OF ELEMENT• get element html var DivHTML = $("#DivID").html();• set element html $("#DivID").html("<p>This is the new html</p>");GET & SET TEXT OF ELEMENT• get text of element var DivText = $("#DivID").text();• set text of element $("#DivID").text("This is the new text.");GET & SET ELEMENT'S WIDTH & HEIGHT• get element height var ElementHeight = $("#DivID").height();• set element height $("#DivID").height(300);• get element width var ElementWidth = $("#DivID").width();• set element width $("#DivID").width(600);CHANGE AN ELEMENT'S CSS PROPERTY $("#DivID").css("background-color", "#000"); $("#DivID").css("border", "solid 2px #ff0000");Ajax$.ajax({ type: 'Method', //HTTP Method url: url, data: {params}, success: function(){}, error: function(){}, dataType: dataType});HTML Helpers• Html.TextBoxFor( m => m.Something)• Html.TextAreaFor(m => m.Something)• Html.DropDownListFor(m => m.Something, new SelectList(Model.ItemsPerPage))• Html.CheckboxFor(m => m.Something, new SelectList(Model.ItemsPerPage))• Html.RadioButtonFor(m => m.Something)• Html.ListBoxFor(m => m.Something)• Html.PasswordFor(m => m.Something)• Html.HiddenFor(m => m.Something)• Html.LabelFor(m => m.Something)• Html.EditorFor(m => m.Something)• Html.DisplayFor(m => m.Something)• Html.DisplayTextFor(m => m.Something)• Html.ValidationMessageFor(m => m.Something)• @Html.ActionLink(LABEL, ACTION, PARAMS)• Pagingvar grid = new WebGrid( source: (IEnumerable<WishListBook>)Model, defaultSort: "Title", rowsPerPage: 20, canPage: true, canSort: true ); grid.SortDirection = SortDirection.Ascending; @grid.GetHtml( htmlAttributes: new { id = "list-of-books" }, columns: grid.Columns( grid.Column("Titulo", "Title", bk => bk.Title), grid.Column("Autor", "Author", bk => bk.Author), grid.Column("Editor", "Editor", bk => bk.Editor) ));HttpContext AtributesApplication ApplicationInstance Cache Current ErrorHandler IsCustomErrorEnabled IsDebuggingEnabled Request Response Server Session SkipAuthorization Timestamp Trace User