terça-feira, 19 de julho de 2011
Material Certificação 70-515 Totalmente em Português....
Controles
Globalização
Cache
ASP.NET
UserControls
UI
JavaScript
MemberShip
Web.Config
WCF
WebConfig
Cache
JavaScript
LINQ to Entities
WebService
XML
Dynamic Data
MVC
Globalização
Life Cicle
UserControl
Validation
Pratices
Javascript / JQuery
AJAX / UpdatePanel
Segurança
Visual Studio
Controls
Controles
1) Para utilizer um GridView em várias páginas de forma que um JavaScript possa localizar elementos HTML neste GridView, defina o atributo ClientIDRowSufix de cada GridView para um valor diferente.
2) Uma propriedade que está na MasterPage pode ser acessada:
a. Na página que quer acessar a propriedade adicione a diretiva: <%@ MasterType VirtualPath=“~/TestMaster.master” %>
3) Para criar um estilo padrão basta criar um SKIN FILE com nome default.skin em um tema, caso seja necessário criar um estilo diferente para aplica-lo, basta criar um skin com nome especifico e definir a propriedade SkinID=“NOME” somente no controle que não usará o skin padrão.
4) Uma propriedade que está na MasterPage pode ser acessada:
MinhaMaster masterPage = this.Master as MinhaMaster;
String propriedadeDaMaster = masterPage.Propriedade;
Globalização
5) Para utilizar a língua de acordo com a seleção do usuário o ideal é sobreescrever o método InitializeCulture e alterar o valor do Page.UICulture
protected override void InitializeCulture()
{
Page.UICulture = Request.Form[“ControleDeSeleção”];
}
Cache
6) Para recuperar um valor inteiro que está em cache basta utilizar a sintaxe:
a. int valorCache = (int)Cache[“CHAVE”];
7) Para inserir um valor inteiro ao cache que deve ser atualizado a cada 15 segundos e removido se não for acessado por mais de 60 segundos?
a. Cache.Insert(“CHAVE”, DateTime.Now, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration); CacheDependency cd = new CacheDependency(null, new string[] { “ CHAVE” });
ASP.NET
8) Um objeto somente pode ser armazenado na sessão “out-of-proc” caso ele possua o atributo [Serializable]
UserControls
9) Para adicionar um UserControl em uma página web basta:
a. Control meuUserControl = Page.Load(“meuUserControlTeste.ascx”);
b. Page.Form.Controls.Add(meuUserControl);
10) Para adicionar uma propriedade Read Only a um UserControl basta criar uma propriedade publica que implemente somente o método get, ex. :
a. public string Nome
{
get { return “São Paulo”; }
}
11) Eventos em UserControls precisam ser definidos por um delegate e um event, isto feito basta adicionar um método ao evento, ex:
a. public delegate void MeuDelegate;
public event MeuDelegate MeuEvento;
<uc:MeuUserControlTeste ID=“ucTeste” runat=“server” OnMeuEvento=“METODO” />
Note que para utiliza o prefixo ON é utilizado ao nome do evento.
12) Para definir um prefixo e um nome padrão para WebControls basta seguir 2 passos, primeiro adicionar o TagPrefix desejado no AssemblyInfo.cs e depois o atributo ToolboxData logo acima da declaração da classe, ex:
Para a saida: <Lib:Rotulo ID=“Rotulo1” runat=“server” Texto=“Padrão” />
No AssemblyInfo.cs: [assembly: TagPrefix(“NAMESPACE”, “Lib”)]
(Substitua o NAMESPACE pelo namespace da classe do controle)
Logo acima da declaração: public class adicione
[ToolboxData(“<{0}:Rotulo runat=\”server\” Texto=\”Padrão\” />“)]
UI
13) O evento OnPreRender pode ser utilizado para manipular controles antes que eles sejam mostrados, por exemplo, se você deseja adicionar o texto “* SELECIONE *” a um dropdownlist:
ddlOpcoes_PreRender(object sender, EventArgs e)
{
DropDownList ddl = sender as DropDownList;
ddl.Items.Add(“* SELECIONE *”);
}
14) Elementos HTML podem ser manipulados caso tenham a tag runat=“server” e um ID, essa manipulação pode ser feita de 2 formas:
<h1 id=“myHeader” runat=“server”>CABEÇALHO</h1>
i. this.myHeader.InnerHtml = “NOVO CABEÇALHO”;
ii. HtmlGenericControl h1 = this.FindControl(“myHeader “) as HtmlGenericControl;
h1.InnerText = “Text”;
JavaScript
15) Para registrar javascript apenas uma vez quando utilizando vários controles:
No Page_Load de cada controle basta registrar o scriptblock: Page.ClientScript.RegisterClientScriptBlock(typeof(“NOME_DA_CLASSE_DO_CONTROLE”, “script”, “CODIGO_JS”);
MemberShip
16) Para saber se um usuário logado pertence a um role especifico como por exemplo ao role “gerente”:
a. bool Gerente = User.IsInRole(“Administrator”);
b. ]
Web.Config
17) Para adicionar um conteúdo no rodapé de todas as páginas de um website, é possível utilizar um modulo HTTP registrado no web.config que possua o código:
public void Init(HttpApplication app)
{
app.EndRequest += new EventHandler(app_EndRequest);
}
void app_EndRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
app.Response.Write(“TEXTO DO RODAPÉ”);
}
18) Para mostrar uma pagina de erro customizada sem alterar a URL original que causou o erro deve-se adicionar ao web.config
<system.web>
<customErrors redirectMode=“ResponseRewrite”
mode=“On”
defaultRedirect =“PaginaDeErro.aspx”/>
</system.web>
19) Para executar um trecho de código somente na primeira vez em que qualquer página for chamada é possível inserir esse código no Application_Start do Global.asax, ex:
void Application_Start(object sender, EventArgs e)
{
//Codigo a ser executado
}
WCF
20) Caso um serviço retorne um array ou outro tipo e você queira trabalhar com uma lista tipada, você precisa Configurar a Referencia do Servico (Configure Service Reference) e selecionar o tipo System.Collections.Generic.List e caso o serviço tenha mudado se endpoint para outra porta, é necessário editar o endereço diretamente no web.config.
WebConfig
21) Para fins de organização é possível retirar por exemplo os dados de ConnectionStrings e colocalos em um outro arquivo separado, para isto basta definir o configSource:
ConnectionStrings
NO WEB CONFIG
<connectionStrings configSource=“connStrings.config”/>
NO ARQUIVO connStrings.config
<connectionStrings>
<add name=“Test” connectionString=“Data Source=[Server IP]; Initial Catalog=TestingDB;User ID=sa;Password=test123;” providerName=“System.Data.SqlClient” />
</connectionStrings>
SMPT
NO WEB CONFIG
<system.net>
<mailSettings>
<smtp configSource=“MailSettings.config”/>
</mailSettings>
</system.net>
NO ARQUIVO MailSettings.config
<network host=“relayServerHostname” port=“portNumber” userName=“username” password=“password” />
22) A forma mais simples de monitorar eventos de erro utilizando o Event Log do Windows é:
Adicione o seguinte código à sessão <healthMonitoring/> no web.config:
<rules>
<add name=“Errors”
eventName=“All Errors”
provider=“EventLogProvider” />
</rules>
23) Um controle de dados(gridview, dropdownlist, detailsview, etc) pode receber um dataset como fonte de dados, neste caso é importante definir qual tabela do dataset deverá ser definida após a definição da fonte de dados, ex:
dataControl.DataSource = GetDataSet();
dataControl.Datasource = “NomeDaTabela”;
dataControl.DataBind();
24) Quando temos um DataSource (ObjectDataSource, SqlDataSource, etc) e precisamos filtrar este data source por um campo qualquer via query string, utilizamos um QueryStringParameter, ex:
a. Se o campo a ser filtrado for por exemplo “NomePessoa” e a query string “nome” utilizamos <asp:QueryStringParameter QueryStringField=“nome” Name=“NomePessoa” Type=“Int32” />
Cache
25) Se você tem uma página que é acessada com frequência mas que os dados no banco mudam com pouca frequência é possível definir um cache para um SqlDataSource. Para definir este cache defina os seguintes atributos no SqlDataSource:
i. DataSourceMode=“DataSet”
ii. Enable Cache=“True”
iii. CacheDuration=“60” (o CacheDuration pode ser maior caso o banco mude raramente)
JavaScript
26) É possível serializar uma propriedade de uma classe para Json utilizando o JavaScriptSerializer, para serializar o nome de todos os produtos de uma lista use:
List<Produto> produtos = GetProdutos();
JavaScriptSerializer json = new JavaScriptSerializer();
JsonValue = json.Serialize(produtos .Select(p => p.Nome));
LINQ to Entities
27) Para inserir uma entidade que está desatachado do contexto basta seguir o exemplo:
private MeuContexto ctx;
ctx.Produtos.Attach(objProduto);
ctx.ObjectStateManager.ChangeObjectState(objProduto, EntityState.Modified);
ctx.SaveChanges();
28) Para obter uma lista de todas pessoas menos as que estão em uma lista podemos utilizar o método Except:
List<Pessoa> todasPessoas = GetPessoas();
string[] usuariosSecretos = {“@secretUser”, “@admin”, “@root”};
var pessoasOcultas = (from p in todasPessoas from u
in secretUsers where p.UserId == u select p).Distinct();
var pessoasPublicas = todasPessoas.Except(pessoasOcultas);
WebService
29) Para permitir que um webservice tenha um método chamado via AJAX é preciso que a classe tenha o atributo ScriptService e o método possua o atributo WebMethod, ex:
[ServiceScript]
public class MeuServico: System.Web.Services.WebService
{
[WebMethod]
public List<Pessoa> BuscarPessoas(string nome)
{
return GetPessoa(nome);
}
}
30) Para permitir que um javascript chame um método de um serviço WCF é preciso antes adicionar a diretiva ServiceHost, indicar o Service e por fim utilizar um Factory adequado, ex:
namespace ServicosWCF
[ServiceContract]
public interface IPessoaService { ….. }
public partial class PessoaService: IPessoaService { …. }
<%@ ServiceHost
Service=“ ServicosWCF. PessoaService”
Factory=“System.ServiceModel.Activation.WebScriptServiceHostFactory”
%>
XML
31) Quando precisamos serializar uma classe é possivel alterar o comportamento padrão de serialização forçando elementos a serem serializados como atributos por exemplo, ou alterar o nome com que o elemento será serializado:
public class Pessoa
{
public string Nome;
}
MODO Elemento: <Nome>JOÃO DA SILVA</Nome>
MODO Atributo: <Nome = “JOÃO DA SILVA” />
Para modificar o nome do Elemento XML basta colocar a tag [XMLElement(“NovoNome”)]
Para definir uma propriedade como sendo um Atributo XML ao invés de Elemento XML, basta colocar a tag [XMLAttribute], ainda é possível modificar o nome do atributo passando o novo nome como parâmetro na tag.
Dynamic Data
32) Em um Dynamic Data Web site, se for necessário criar uma listagem customizada para uma tabela chamada Pedidos, é preciso criar uma pasta chamada Pedidos dentro de DynamicData\CustomPages e adicionar uma webpage com o nome ListDetails.aspx e nela criar o layout.
33) Para adicionar um Dynamic Data à um GridView e possibilitar que este grid permita fazer update dos dados, é preciso (usando a entidade Pessoa):
i. Desabilitar a propriedade “Auto-Fenerated Fields” e adicionar um Dynamic Field para cada campo da entidade pessoa
ii. No Page_Init adicionar o código minhaGridView.EnableDynamicData(typeof(Pessoa));
MVC
34) Para definir que uma ação seja invocada quando a URL raiz for acessada, por exemplo ActionResult Teste() no HomeController, basta no Global.asax utilizar: routes.MapRoute( “Default4Empty”, “{controller}/{action}/{id}”, new {controller=“Home”, action=“Teste”, id=““} );
35) Para invocar a ação MostrarProduto(string nome) do no HomeController, fazendo validação que permita a entrada de nomes com no mínimo 5 e no máximo 10 caracteres é preciso adicionar no método RegisterRoutes do Global.asax:
Routes.MapRoute(“Mostrar Produto”, “{nomeproduto}”, new { controller = “Home”, action = “MostrarProduto”, new { nomeproduto = @”\w5,10” }
36) Se tivermos uma URL /MostrarProduto/{nomeproduto} que traz informações sobre os produtos e seja necessário não permitir que URL requests com nome de produtos desconhecidos não sejam processados pelo controler é preciso implementar a interface IRouteConstraint e configurar a deault route para utilizar a classe que implementa a interface.
37) Para garantir que apenas usuários logados tenham acesso a um action basta adicionar ao action os seguintes atributos:
i. [Authorize(Users = ““)]
ii. [Authorize(Roles = ““)]
Lembrando: “?” = Anonimos, ““ = Loagados , “*” = Qualquer (Anonimos e Logados)
38) Normalmente quando esta mensagem de erro é exibida, basta adicionar os atributos [HttpGet] e [HttpPost] aos métodos que possuem nomes idênticos, ex:
ActionResult MostrarProduto(int ID) { .... }
ActionResult MostrarProduto(Produto p) { .... }
Neste caso adicionamos [HttpGet] ao primeiro método e [HttpPost] ao segundo.
39) No caso de criarmos um controler NewHomeController para que ele responda na URL /newhome/info é preciso:
i. Criar um ActionResult com nome INFO que retorne uma View
ii. Clicar no controler e selecionar “Add View” para adicionar uma view para a action
40) Para criar um link em uma página qualquer leve para Detalhes.aspx do TesteController, sendo que existe uma rota registrada cujo nome da área é “teste”: <%= Html.ActionLink(“Teste”, “Detalhes”, “Teste”, new {area = “teste”}, null) %>
41) Quando uma página não é retornada corretamente o primeiro passo é verificar se no RegisterRoutes do Global.asax há a linha: Registration.RegisterAllAreas();
42) Para adicionar um UserControl chamado “menuPrincipal.ascx” que apareça em todas as views, utilizamos uma MasterPage e nela adicionamos um DIV, em seguida neste div adicionamos a seguinte tag: <% Html.RenderPartial(“~/Views/Shared/ menuPrincipal.ascx”); %>
43) No caso de haver um controle que especifico (“MaisBonito.ascx”) a ser utilizado para mostrar o valor de um model, basta adicionar o atributo [UIHint(“MaisBonito”)] à propriedade que deverá utilizar o controle, lembrando que o ASCX deverá estar na pasta Views/Shared/DisplayTemplates.
44) A mensagem “The view “XXXX” or its master was not found” é causada muitas vezes pela página não estar na página correta, por ex, a view Index.aspx do PessoaController, deve estar na pasta Pessoa dentro da pasta Views, caso contrário o erro ocorrerá.
45) Para mostrar o resultado de um ActionResult basta utilizar um Html.Action, ex:
public ActionResult ListarProdutos (Categoria c)
{
List<Produto> produtos= GetProtudosDaCategoria(c);
return View(produtos);
}
<%= Html.Action(“ListarProdutos”, Model) %>
46) Para evitar que código JS malicioso seja enviado em uma TextBox, basta adicionar na diretiva @Page a marcação EnableEventValidation=“True”
Globalização
47) A globalização de controles pode ser feita basicamente de duas formas:
a. Usando um LOCAL RESOURCE:
<asp:Button ID=“Button1” runat=“server” Text=“DefaultText” meta:resourcekey=“Button1” />
b. Usando um GLOBAL RESOURCE:
<asp:Button ID=“Button1” runat=“server” Text=“<%$ Resources:WebResources, Button1Caption %>“ />
Life Cicle
48) No caso de haver um ícone que deve ser mostrado ou não de acordo com uma condição, o ideal é que essa validação seja feita no PreRender da página.
49) Para manter um GridView sempre atualizado e ganhar performance mantendo seu ViewState desligado, será preciso definir o DataSource e efetuar o DataBind a cada postback no Page_Load
50) Para validar todos os dados enviados o certo é verificar a propriedade Page.IsValid durante o Page_Load
UserControl
51) Um UserControl pode ser colocado em cache para otimizar a performance, para deixa-lo em cache por 30 segundos para que depois ser re-gerado, basta adicionar a tag: <%@ OutputCache Duration=“30” VaryByParam=“None” %> tanto ao controle como à pagina.
52) Um UserControl pode se comportar de forma estranha quando desabilitamos o ViewState, para evitar este problema o estado do controle deve ser armazenado no ControlState e não no ViewState.
53) O ViewState pode gerar erros de Invalid ViewState quando a aplicação está em um Web Farm, para evitar este erro basta adicionar no machine.config de todos os servidores do farm a o mesmo valor para a chave machineKey.
Validation
54) A forma mais simples de não enviar dados para o servidor sem validar no cliente é utilizar o evento OnSubmit do botão Submit de um FORM, nele podem ser feitas as validações do formulário via javascript e o envio (submission) pode ser cancelado com e.returnValue = false;
55) Para validar uma textbox e permitir que somente números sejam adicionados à ela podemos usar um RegularExpressionValidator, ex:
<asp:TextBox ID=“txtValor” runat=“server” />
<asp:RegularExpressionValidator ID=“val1” runat=“server” ControlToValidate=“ txtValor “ ValidationExpression=“[0-9]*” ErrorMessage=“Digite um Número Válido” />
56) Para criar uma validação customizada utilizando javascript para permitir números entre 1 e 10 podemos usar o parâmetro args.IsValid = (true | false), ex:
<script type=“text/javascript”>
function validate_value(obj, args)
{
args.IsValid = (args.Value >= 1 && args.Value <= 10);
}
</script>
Pratices
57) Para permitir o upload de um arquivo somente se seu tamanho for inferior a 1 MB a melhor maneira é utilizar o FileUpload do ASP.NET e fazer a validação no server-side no evento OnClick do botão que faz o envio do arquivo.
58) Para melhorar acessibilidade, é possível adicionar labels que quando clicados selecionam um textbox diretamente, para isto é preciso criar um asp:Label e definir a propriedade AssociatedControlID do Label com o ID do Textbox correspondente
59) Para popular um menu ASP.NET no code-behind com um array de strings, o ideal é fazer isto no Page_Load. Durante o Page_Load é preciso criar uma instancia de MenuItem para cada elemento do array e em seguida adicionar esses itens a menu.
60) Para mostrar textos que são digitados pelo usuário e evitar ataques de cross-site script os textos devem ser mostrados usando HttpUtility.HtmlEncode.
Javascript / JQuery
61) Para criar um menu utilizando Divs basta seguir a estrutura:
<div class=“dropdown-menu”>
<div class=“menu-title”>Menu 1</div>
<div class=“menu-items” style=“display:none;”>
<div><a href=“#”>Item 1.1</a></div>
<div><a href=“#”>Item 1.2</a></div>
</div>
</div>
<div class=“dropdown-menu”>
<div class=“menu-title”>Menu 2</div>
<div class=“menu-items” style=“display:none;”>
<div><a href=“#”>Item 2.1</a></div>
<div><a href=“#”>Item 2.2</a></div>
</div>
</div>
$(“.dropdown-menu”).hover(
function ()
{
$(“.menu-items”, this).slideDown(100);
},
function ()
{
$(“.menu-items”,this).slideUp(100);
}
);
62) Para carregar scripts em paralelo e ganhar tempo no carregamento, é possível utilizar o AJAX Library Loader sendo preciso efetuar 2 ações:
i. Na master page, chamar Sys.loader.defineScripts para definir todos os scripts que são usados no site
ii. Em cada pagina especifica, chamar Sys.require para cada script necessário naquela página
63) Para modificar uma imagem utilizando JS basta usar o seguinte código, ex.:
<img id=“imgStatus” src=“/offline.png” />
document.getElementById(“imgStatus”).src = “online.jpg”
64) Para modificar o estilo de um link por exemplo que está dentro de um <span> basta seguir o exemplo:
<span id=“ref”>
<a href=“http://www.teste.com/contato”>Contato</a>
<a href=“http://www.teste.com/ajuda”>Ajuda</a>.
</span>
$(“#ref a[href]”).css({fontWeight:”bold”});
65) Para adicionar imagens a partir de um URL a uma div basta seguir o exemplo abaixo:
<div id=“divImagens”></div>
$.each(imageurls, function(i,url){ $(“<img/>“).attr(“src”, url).appendTo(“#divImagens”); });
66) Para adicionar um novo Uploader a cada click de um botão basta seguir o exemplo:
<script type="text/javascript">
var lastId = 0;
</script>
<div class="File">
Choose a file to upload:
<input id="File0" name="File0" type="file" />
</div>
<input id="AddFile" type="button" value="Add a File" />
<input id="Submit" type="submit" value="Upload" />
$("#AddFile").click(
function ()
{
var id = "File" + ++lastId;
var item = $(".File:first").clone(true);
$("input:file", item).attr({ id: id, name: id });
item.insertBefore("#AddFile");
});
67) Para adicionar um evento a um checkbox em uma tabela que seja disparado quando o checkbox é selecionado usamos:
$('.Results').bind('onrowselected', function (e, sender) { ... }).click(function (e)
{
if ($(e.target).is('input:checked'))
{
$('.Results').trigger('onrowselected', [$(e.target)]);
}
});
68) Para mudra a cor de um elemento chamado “Banner” com base emu ma lista podemos fazer:
<script>
function changeColor(c)
{
Banner.style.color=c;
}
</script>
<p id=" Banner ">Bem Vindo ao Site!</p>
<ul id="color">
<li onclick="changeColor(this.innerText);">Black</li>
<li onclick="changeColor(this.innerText);">Red</li>
</ul>
AJAX / UpdatePanel
69) Para atualizar constantemente o conteudo de um update panel sem atualizar todo o restante da página, basta seguir 2 passos:
i. Adicione um Timer DENTRO do UpdatePanel
ii. Adicione um AsyncPostBakTrigger que referencie o Timer
70) UP
71) UP
72) Para atualizar divs individualmente sem efetuar um refresh na página inteira, para isto é preciso ter UM form, DOIS UpdatePanels e UM ScriptManager. Em seguida basta mover os divs, colocando um em cada UpdatePanel.
73) Para adicionar um div (aqui chamado de divInfo que mostre todos erros de uma determinada chamada de uma função $.ajax podemos, colocamos o código abaixo no $(document).ready da página:
$("# divInfo ").ajaxError(function(event, request, settings)
{
$(this).append("<li>Erro chamando: " + settings.url + "</li>");
});
74) Para adicionar o conteúdo HTML baixado de uma URL definida pela variavel URLDestino e adicionar a um span, seguimos o seguinte:
<span id="span1">Text</span>
$.ajax({
type: "GET",
url: localURL,
success: function(htmlText)
{
$("#span1").html(htmlText);
}
});
75) Para criar um menu a partir de um XML retornado por um serviço podemos usar como exemplo:
<xml version="1.0" >
<users>
<user id="Item1">
<name>Nome 1</name>
<email>email1@teste.com</email>
</user>
<user id="Item2">
<name>Nome 2</name>
<email>email2@teste.com</email>
</user>
</users>
$.ajax({
type: "GET",
url: serviceURL,
success: function(xml)
{
$(xml).find("user").each(function()
{
var id = $(this).attr("id");
var tx = $(this).find("name").text();
$("<option>").attr("value", id) .text(tx).appendTo("#dropdown");
});
}
});
Segurança
76) Para definir permissões para um grupo via Web.Config é possível trabalhar com a tag <location>, para definir permissão a uma página para um GRUPO chamado ADMIN e não permitir acesso de mais ninguém:
<location path=“PageAdm.aspx”>
<system.web>
<authorization>
<allow roles=“ADMIN”/>
<deny users=“*” />
< authorization >
<system.web>
< location >
Assim somente o grupo ADMIN pode acessar a página PageAdm.aspx (<allow roles=“ADMIN”/>
) e todos os outros ficam bloqueados (<deny users=“*” />)
“*” = ALL
“?” = ANONIMO
““ = LOGADO (INDEPENDENTE DE PERFIL)
a ordem das tags importa muito portanto não inverta.
77) Numa aplicação que usa SqlMembershipProvider, quando precisamos testar a aplicação em vários servidores, mas com acesso ao mesmo banco de dados, basta seguir 2 passos:
i. Crie a estrutura do provider pelo “aspnet_regsql”
ii. Modifique o web.release.config para utilizar o nome correto na connection string
78) A forma mais simples de permitir que um site controle as permissões de acesso e permita que o usuário se cadastre utilizando um ID customizado baseado em seu nome completo, use os seguintes passos:
i. Configure o SqlMembershipProvider no web.config
ii. Crie uma pagina de cadastro que use o Membership.CreateUser
Visual Studio
79) A forma mais eficiente de trabalhar com uma aplicação que consome tipos definidos por uma class library que sofre alterações frequentes, é adicionar a class library à solution e adicionar no projeto Web uma referencia para esta class library. Isto garantirá acesso sempre atualizado.
80) Para permitir o debug interativo da aplicação dois itens são necessários:
i. O atributo Debug como true no web.config na sessão de compilação
ii. ASP.NET debugger marcado nas propriedades do projeto
81) Para publicar uma aplicação no IIS garantindo que todas as configurações necessárias serão enviadas ao servidore remoto a solução é usar o Publish Web Site.
82) Connection String
Controls
83) Para mudar a cor de uma linha do Gridview baseado no dado que é recebido, por exemplo um produto com estoque abaixo de 10 unidades é possível fazer essa modificação durante o evento RowDataBound.
84) Quando trabalhamos com uma grande quantidade de dados e precisamos paginar um controle do tipo ListView utilizamos um DataPager, com ele basta definir o PagedControlID e os dados serão paginados
85) Dentre os modelo de DataSource, podemos utilizar 2 para acessar diretamente o banco de dados:
i. SqlDataSource
ii. LinqDataSource
Assinar:
Postagens (Atom)