<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sylverio &#187; ASP.Net</title>
	<atom:link href="http://sylverio.com.br/blog/tag/asp-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://sylverio.com.br/blog</link>
	<description>Análise, Arquitetura, Orientação a Objetos, UML, Tecnologias e Programação</description>
	<lastBuildDate>Mon, 06 Feb 2012 11:01:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Entendendo o Model do ASP.Net MVC</title>
		<link>http://sylverio.com.br/blog/2010/09/entendendo-o-model-do-asp-net-mvc/</link>
		<comments>http://sylverio.com.br/blog/2010/09/entendendo-o-model-do-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 02:18:11 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=576</guid>
		<description><![CDATA[Como prometi no último post Introdução ao ASP.Net MVC, que por sinal faz tempo que escrevi, pretendo dar continuidade ao assunto ASP.NET MVC e dessa vez falar um pouco do M de Model. O que é o M de Model &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2010/09/entendendo-o-model-do-asp-net-mvc/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Como prometi no último post <a href="http://sylverio.com.br/blog/2010/04/criando-uma-asp-net-mvc-web-application/">Introdução ao ASP.Net MVC</a>, que por sinal faz tempo que escrevi, pretendo dar continuidade ao assunto ASP.NET MVC e dessa vez falar um pouco do M de Model.</p>
<h2>O que é o M de Model</h2>
<p>O <strong>Model representa os dados da aplicação</strong>, ou seja, são objetos que armazenam as informações a serem transportados da camada inferior para e pela interface, dessa forma a camada de interface é desacoplada das demais camadas. É muito comum iniciantes confundirem model com objetos de domínio, inclusive já li esse erro em diversas literaturas, o que ajuda a tornar as coisas mais confusas.<br />
Também não confunda arquitetura em camadas com MVC, pois a estruturação do MVC encontra-se somente na primeira camada.</p>
<h3>Exemplificando</h3>
<p>Criei um ASP.NET MVC Application chamado <em>NewsletterApp</em>. A idéia é criar nessa aplicação um cadastro de cliente, e exemplificar o conceito de Model.<br />
<img alt="Solution Explorer" src="http://sylverio.com.br/blog/image/solution_explorer_newsletter.png"  width="204" height="350" /></p>
<p>Nessa estrutura criei uma classe Model chamada Customer.cs</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Customer
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Name <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Email <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Phone <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> IsActive <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Um controller chamado HomeController que possui três Action Methods, um <em>Index()</em> que irá renderizar a View Index.aspx, os outros dois CustomerRegistration, repare nos atributos <em>AcceptVerbs</em> isso irá permitir que as requisições do tipo Get sejam atribuídas ao primeiro Action Method CustomerRegistration e os submits do formulário (requisições do tipo Post) sejam atribuídas ao segundo.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> HomeController <span style="color: #008000;">:</span> Controller
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> ViewResult Index<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008000;">&#91;</span>AcceptVerbs<span style="color: #008000;">&#40;</span>HttpVerbs<span style="color: #008000;">.</span><span style="color: #0000FF;">Get</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> ViewResult CustomerRegistration<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008000;">&#91;</span>AcceptVerbs<span style="color: #008000;">&#40;</span>HttpVerbs<span style="color: #008000;">.</span><span style="color: #0000FF;">Post</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> ViewResult CustomerRegistration<span style="color: #008000;">&#40;</span>Customer customer<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// TODO: executar o processo de cadastro do cliente </span>
        <span style="color: #008080; font-style: italic;">// Neste ponto, é chamada para camada de negócio ou banco de dados</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;CustomerResponse&quot;</span>, customer<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p><strong>Observação:</strong> No último Action Method coloquei um comentário. Ele se refere ao local onde o poderia ser realizada a chamada para camada de negócio ou banco de dados, para o cadastramento dos dados do cliente. Como o foco desse post não é o desenvolvimento desse processo. Optei em utilizar um comentário para exemplificar.</p>
<p>E duas páginas Index.aspx que é a nossa <em>Startup Page</em>. nela constem somente uma ancora (tag a) para a página CustomerRegistration.aspx que executa o processo de cadastro.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span>&lt; %= Html.ActionLink<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Cadastro Cliente&quot;</span>, <span style="color: #ff0000;">&quot;CustomerRegistration&quot;</span><span style="color: #66cc66;">&#41;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>E CustomerRegistration.aspx que possui um formulário com um input type=&#8221;submit&#8221;, para enviar os dados do cliente para a Action de destino do Form.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Cliente<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fieldset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;">&lt; % using<span style="color: #66cc66;">&#40;</span>Html.BeginForm<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Nome:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span>&lt; %= Html.TextBox<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Name&quot;</span><span style="color: #66cc66;">&#41;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Email:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span>&lt; %= Html.TextBox<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Email&quot;</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Telefone:<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span>&lt; %= Html.TextBox<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Phone&quot;</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Ativo: <span style="color: #009900;">&lt; %= Html.DropDownList<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;IsActive&quot;</span>, new<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">                    new SelectListItem <span style="color: #66cc66;">&#123;</span> Text = <span style="color: #ff0000;">&quot;Sim&quot;</span>,Value = bool.TrueString <span style="color: #66cc66;">&#125;</span>,</span>
<span style="color: #009900;">                    new SelectListItem <span style="color: #66cc66;">&#123;</span> Text = <span style="color: #ff0000;">&quot;Não&quot;</span>,Value = bool.FalseString <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Salvar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;">&lt; % <span style="color: #66cc66;">&#125;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fieldset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Agora vamos criar mais uma página para a resposta do cadastramento.<br />
Para isso basta clicar com o botão direito sobre o diretório <em>Home > Add > View</em>. Informamos o nome da página, no exemplo utilizei CustomerResponse.<br />
E selecionamos a opção <strong>Create a strongly-typed view</strong>.<br />
<img alt="Strongly-Typed View" src="http://sylverio.com.br/blog/image/view_strongly_typed.png"  width="277" height="300" /></p>
<p>E inclui o seguinte código na página.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&lt;</span>h1<span style="color: #008000;">&gt;</span>Obrigado<span style="color: #008000;">!&lt;/</span>h1<span style="color: #008000;">&gt;</span>
<span style="color: #008000;">&lt;</span>p<span style="color: #008000;">&gt;&lt;</span> <span style="color: #008000;">%=</span> Html<span style="color: #008000;">.</span><span style="color: #0000FF;">Encode</span><span style="color: #008000;">&#40;</span>Model<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">%&gt;</span> foi cadastrado com sucesso<span style="color: #008000;">.&lt;/</span>p<span style="color: #008000;">&gt;</span>
<span style="color: #008000;">&lt;</span>p<span style="color: #008000;">&gt;</span>Seu status é 
<span style="color: #008000;">&lt;</span> <span style="color: #008000;">%</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>Model<span style="color: #008000;">.</span><span style="color: #0000FF;">IsActive</span> <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #008000;">%&gt;</span>
        ativo<span style="color: #008000;">.</span>
<span style="color: #008000;">&lt;</span> <span style="color: #008000;">%</span> <span style="color: #008000;">&#125;</span><span style="color: #0600FF; font-weight: bold;">else</span><span style="color: #008000;">&#123;</span> <span style="color: #008000;">%&gt;</span>
        inativo<span style="color: #008000;">.</span>
<span style="color: #008000;">&lt;</span> <span style="color: #008000;">%</span> <span style="color: #008000;">&#125;</span> <span style="color: #008000;">%&gt;</span>
<span style="color: #008000;">&lt;/</span>p<span style="color: #008000;">&gt;</span></pre></td></tr></table></div>

<p>Neste momento você deve estar se perguntando como algumas algumas coisas acontecem?<br />
É agora que entra a mágica do MVC.</p>
<h2>Model Binding</h2>
<p>Na HomeController a primeira Action Method de CustomerRegistration simplismente renderiza a View, porém a segunda recebe uma instância de Customer como um parâmetro.<br />
A pergunta aqui é <em>como um método é invoca via HTTP request passando um tipo .NET como parâmetro se ele é totalmente desconhecido do HTTP</em>?<br />
Simples&#8230; Chama-se <strong>Model Binding</strong>. O ASP.NET MVC automaticamente instância e converte os parâmetros por meio de chave/valor que tenham os mesmos nomes das propriedades do tipo .NET utilizado como parâmetro no Action Method.<br />
Repare que os nomes dos elementos text do formulário possuem o mesmo nome dos atributos da classe Customer.</p>
<p>Outra característica apresentada pela segunda Action é a especificação da View que irá ser renderizada,  e definição do objeto Model que será passado para View, esse View é chamado de  <strong>strongly typed view</strong>, pois está fortemente tipada com um objeto da aplicação.<br />
Esta view permite que seja acessada a variável chamada Model que esta relacionada ao tipo da criação da página no caso do exemplo o objeto Customer.</p>
<h3>Conclusão</h3>
<p>Gostei muito da arquitetura MVC por permite uma melhor separação de responsabilidade dos componentes de interface. Como por exemplo a separação de Actions para Get E Post. O encapsulamento de parâmetro em instância de objetos reduz a escrita de código.<br />
A utilização de objetos Model na aplicação ficou mais presente, e sua interação com outros instâncias passa a ser mais requerida.</p>
<p>Até mais<br />
Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2010/09/entendendo-o-model-do-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um ASP.NET MVC Web Application</title>
		<link>http://sylverio.com.br/blog/2010/04/criando-uma-asp-net-mvc-web-application/</link>
		<comments>http://sylverio.com.br/blog/2010/04/criando-uma-asp-net-mvc-web-application/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 01:49:27 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=421</guid>
		<description><![CDATA[No post ASP.Net MVC fiz uma introdução as caracteristicas desse novo tipo de projeto web. Neste post vou apresentar um pouco mais sobre esse projeto, sua estrutura, comportamento. Para isso é necessário instalar o ASP.NET MVC. Após a instalação o &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2010/04/criando-uma-asp-net-mvc-web-application/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>No post <a href="http://sylverio.com.br/blog/2010/02/asp-net-mvc/">ASP.Net MVC</a> fiz uma introdução as caracteristicas desse novo tipo de projeto web. Neste post vou apresentar um pouco mais sobre esse projeto, sua estrutura, comportamento.<br />
Para isso é necessário instalar o <a href="http://www.microsoft.com/web/gallery/install.aspx?appsxml=http://www.microsoft.com/web/webpi/2.0/WebProductList.xml&#038;appid=MVC2" target="_blanck">ASP.NET MVC</a>. Após a instalação o Visual Studio 2008  apresentará um novo tipo de projeto Web, chamado ASP.NET MVC Web Application.</p>
<p><img src="http://sylverio.com.br/blog/image/new_project_mvc.png" alt="New Project ASP.NET MVC Web Application" /></p>
<p>Ao criar um projeto do tipo ASP.NET MVC Web Application uma aplicação de demonstração (padrão) é apresentada na Solution Explorer.</p>
<p>O ASP.NET MVC a primeira vista parece ser bem complicado, mas apartir do momento que se conhece melhor a sua estrutura e seu funcionamento, ele passa a ser bem simples.</p>
<h2>Estrutura do ASP.NET MVC Web Application</h2>
<p>Primeiramente vamos nos atentarmos a estrutura, pois ela contem diversas convensões que devem ser utilizadas pelo ASP.NET MVC.<br />
<img style="float:right;width:280px;margin:5px 0 5px 15px;" src="http://sylverio.com.br/blog/image/solution_mvc.png" alt="Solution Explorer MVC Web Application" /><br />
Repare nos diretórios, obrigatóriamente teremos o Controller, Model e View.<br />
Outra convensão é para as classes controladoras (contidas no diretório <strong>Controller</strong>), devem possuir o sufixo Controller em seus nomes e um sub-diretório no diretorio View. Confuso? Repare na Solution o diretorio Controller, note que possui duas classes controladoras Account e Home ambas com o sufixo Controller. Agora veja o diretório View, ele possui dois sub-diretórios com o mesmo nome da controladora (Account e Home).<br />
No diretório <strong>View</strong> ficam os templates que correspondem a ações dos controllers  e seram renderizados.<br />
O sub-diretório <strong>View/Shared</strong> contém recorsos compartilhados com a aplicação, como página de erro genérica, master page, entre outros.<br />
O diretório <strong>Script</strong> é destinado a armazenar biblioteca JavaScript e scripts (.js)<br />
O diretório <strong>Content</strong> é destinado a armazenar arquivos de estilo (CSS), arquivos de imagens e outros não dinâmicos.<br />
Na raiz do ASP.NET MVC Web Application temos os arquivos Global.asax, default.aspx e web.config estes arquivos são utilizados em conjunto para realizarem a sobreescrita (rewrite) de URL, mas esse assunto ficará para um próximo post.</p>
<h2>Como ASP.NET MVC trabalha</h2>
<p>Para compreender melhor o funcionamento do ASP.NET MVC, vamos remover alguns arquivos e diretórios da aplicação padrão. </p>
<ul>
<li>App_Data <em>(diretório)</em></li>
<li>AccountController.cs <em>(arquivo)</em></li>
<li>Account <em>(diretório)</em></li>
<li>About.aspx <em>(arquivo)</em></li>
<li>Index.aspx <em>(arquivo)</em></li>
<li>Error.aspx <em>(arquivo)</em></li>
<li>LogOnUserControl.ascx <em>(arquivo)</em></li>
<li>Site.Master <em>(arquivo)</em></li>
</ul>
<h3>Hello Word</h3>
<p>Como é padrão e não pode faltar em qualquer tutorial de introdução, vamos criar a famosa aplicação Hello Word!. Para isso no arquivo HomeController reescreva o código para que fique da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> HomeController <span style="color: #008000;">:</span> Controller
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Index<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #666666;">&quot;Hello, word!&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Pronto, ao executar (<em>F5</em>) criamos nosso primeiro ASP.NET MVC Application.</p>
<p>Na arquitetura MVC, os controllers são reponsáveis por manipular as requisições. No .NET, controller são classes derivadas de <em>System.Web.Mvc.Controller</em>. E cada <em>método público</em> no <strong>Controller</strong> é conhecido como <strong>Action Method</strong> (método de ação), que são chamados da web por meio de alguma URL. Em nossa aplicação acima temos nosso controller chamado <em>HomeController</em> com seu action method chamado <em>Index</em>.<br />
Quando executamos a aplicação o <strong>Routing System</strong> (sistema de rotas) do ASP.NET MVC decidiu qual controller e action method executar. Não por acaso utilizei este controller e action method, esta é a configuração padrão de nosso aplicação, que está configurada no arquivo <em>Global.asax.cs</em>, como pode ser visto:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> RegisterRoutes<span style="color: #008000;">&#40;</span>RouteCollection routes<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    routes<span style="color: #008000;">.</span><span style="color: #0000FF;">IgnoreRoute</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{resource}.axd/{*pathInfo}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    routes<span style="color: #008000;">.</span><span style="color: #0000FF;">MapRoute</span><span style="color: #008000;">&#40;</span>
        <span style="color: #666666;">&quot;Default&quot;</span>,                                            <span style="color: #008080; font-style: italic;">// Route name</span>
        <span style="color: #666666;">&quot;{controller}/{action}/{id}&quot;</span>,                         <span style="color: #008080; font-style: italic;">// URL with parameters</span>
        <span style="color: #008000;">new</span> <span style="color: #008000;">&#123;</span> controller <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Home&quot;</span>, action <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Index&quot;</span>, id <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span> <span style="color: #008000;">&#125;</span><span style="color: #008080; font-style: italic;">// Parameter defaults</span>
    <span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Em nosso Routing System, é definido a rota default com o controller Home e o action method Index sem passagem de parâmetro. Dessa forma as seguintes requisição serão manipuladas pela action Index no HomeController:</p>
<ul>
<li>/</li>
<li>/Home</li>
<li>/Home/Index</li>
</ul>
<h2>Renderizando Web Pages</h2>
<p>Como já mensionado, na arquitetura MVC o <strong>Controller</strong> é responsável por manipular as requisições e as <strong>Views</strong> são componentes de interface do usuário. Assim não está correto em nossa aplicação o controller enviar a resposta (no nosso caso texto) para o browser. Em uma aplicação real o controller deve passar essa tarefa para uma View. Para isso vamos reescrever o método Index da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> HomeController <span style="color: #008000;">:</span> Controller
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> ViewResult Index<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Dessa forma a action retorna um objeto do tipo <strong>ViewResult</strong>, passando para o Framework a instrução de renderizar uma View. O próximo passo é criar a View, para isso podemos clicar com o botão direito no action method Index e selecione Add View, isto irá criar um novo template para o action method em <em>&#8220;~/Views/Home/Index.aspx&#8221;</em>.<br />
Altere o código HTML na tag body da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Hello, Word!<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>(renderizada apartir da View)<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span></pre></td></tr></table></div>

<p>Nossa aplicação está finalizada, execute para visualizar a página rendenrizada pela View.</p>
<p><img src="http://sylverio.com.br/blog/image/hello_word_aspnet_mvc.png" alt="Hello Word ASP.NET MVC Web Application" /></p>
<p>Repare que não é necessário informar o nome da View que será chamada. O Framework renderiza a View que contém o mesmo nome do action method.</p>
<p>Há outros objetos de retorno que um Action Method pode retornar que instrui o framework diferentes fins. Esses tipos de retorno são chamados <strong>Action Results</strong>, mas isso será assunto para um próximo post, assim como a compreensão do <strong>M</strong> de <strong>Model</strong> de nossa arquitetura MVC.</p>
<p>Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2010/04/criando-uma-asp-net-mvc-web-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.Net MVC</title>
		<link>http://sylverio.com.br/blog/2010/02/asp-net-mvc/</link>
		<comments>http://sylverio.com.br/blog/2010/02/asp-net-mvc/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 15:06:38 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=375</guid>
		<description><![CDATA[ASP.NET MVC é um framework (que promete bastante evolução no framework.NET 4.0 que será lançado junto com o VS 2010) voltado para o desenvolvimento de aplicações web seguindo o padrão de arquitetura MVC Model-View-Controller que separa a aplicação em três &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2010/02/asp-net-mvc/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>ASP.NET MVC é um framework (que promete bastante evolução no framework.NET  4.0 que será lançado junto com o VS 2010) voltado para o desenvolvimento de aplicações web seguindo o padrão de arquitetura MVC Model-View-Controller que separa a aplicação em três (3) componentes principais: o modelo, a visão e controlador.<br />
O framework MVC é definido no namespace System.Web.Mvc, suporta parte do namespace System.Web e permite o desenvolvimento de aplicações web utilizando a combinação dos dois tipos de abordagens  Web Forms e MVC. Nenhuma abordagem exclui a outra.</p>
<p>O framework MVC inclui os seguintes componentes:</p>
<ul>
<li>Modelo (Model) &#8211; Objetos de modelo são partes da aplicação que implementam a lógica para as aplicações de domínio.</li>
<li>Visão (Views) &#8211; Views são componentes de interface do usuário (UI).</li>
<li>Controladores (Controllers) – Controladores são componentes que manipulam as interações dos usuários, trabalhando os dados com o model, e finalmente seleciona a view para “renderizar” os resultados de saída para mostrar no UI. </li>
</ul>
<p>O padrão MVC permite separar os diferentes aspectos de uma aplicação web e fornece um baixo acoplamento entre elementos por especificar cada tipo de lógica que pode ser utilizada na aplicação. Esta separação permite um melhor gerenciamento de complexidade da aplicação, pois a concentração em um aspecto da programação de cada vez. Também possibilita o desenvolvimento guiado por teste (TDD) de uma forma mais fácil do que em Web Forms.<br />
A perda de acoplamento entre os componentes de uma aplicação, MVC também promove desenvolvimento paralelo. Um desenvolvedor pode trabalhar em uma view, enquanto um segundo desenvolvedor pode trabalhar em uma lógica do contoller e um terceiro desenvolvedor pode focar na lógica de negocio do modelo.</p>
<h2>Vantagens de uma aplicação baseada em MVC</h2>
<p>A utilização do modelo MVC traz alguns benefícios ao desenvolvimento com relação ao antigo Web Forms como:</p>
<ul>
<li>Não utilize ViewState ou foms baseados em servidor (server).</li>
<li>Maior liberdade para desenvolvedores que gostam do controle total sobre o comportamento de uma aplicação (HTML).</li>
<li>Usa um padrão Front Controller que processa as requisições de uma aplicação web através de um simples controlador (controller). Isto possibilita o desenvolvimento de uma aplicação que suporta uma rica rota de infraestrutura.</li>
<li>Fornece um suporte melhor para test-driven development (TDD).</li>
<li>O ASP.NET MVC framework suporta Injeção de Dependência (ID) e Inversão de Controle (IC).</li>
<li>Mapeamento de URL .</li>
<li>Utilização das características existente com o uso de páginas (.aspx),  user control (.ascx) e máster Page (.master ) no modelo MVC.</li>
</ul>
<p>Até mais <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2010/02/asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quando utilizar Literal e Label</title>
		<link>http://sylverio.com.br/blog/2009/12/quando-utilizar-literal-e-label/</link>
		<comments>http://sylverio.com.br/blog/2009/12/quando-utilizar-literal-e-label/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 01:45:38 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=308</guid>
		<description><![CDATA[Primeiramente vamos as definições: Literal é um controle que reserva um local da página para exibir um texto estático. Label é um controle de rótulo usado para mostrar textos na página. Ambos os controles possuem a propriedade Text, que define &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2009/12/quando-utilizar-literal-e-label/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Primeiramente vamos as definições:</p>
<ul>
<li>Literal é um controle que reserva um local da página para exibir um texto estático.</li>
<li>Label é um controle de rótulo usado para mostrar textos na página.</li>
</ul>
<p>Ambos os controles possuem a propriedade Text, que define o texto a ser exibido.<br />
Não há um controle melhor ou pior. E sim saber quando e como utilizar esses controles corretamente. O mais importante é entender e saber o que é produzido em sua renderização.<br />
É nesse momento que as diferenças ficam mais aparentes.</p>
<p><strong>Criando um projeto para comparar os controles</strong><br />
Para exemplificar os controles criei um ASP.Net Web Site com o nome LabelTeste<br />
Na página Default.aspx inclui o seguinte código interno a tag form:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;teste&quot;&gt;
        &lt;h3&gt;Controles ASP.Net&lt;/h3&gt;
        &lt;p&gt;&lt;asp:Label ID=&quot;lblTeste1&quot; runat=&quot;server&quot;&gt;&lt;/asp:Label&gt;&lt;/p&gt;
        &lt;p&gt;&lt;asp:Literal ID=&quot;ltrTeste1&quot; runat=&quot;server&quot;&gt;&lt;/asp:Literal&gt;&lt;/p&gt;
        &lt;p&gt;&lt;asp:Label ID=&quot;lblTeste2&quot; AssociatedControlID=&quot;txtTeste2&quot; runat=&quot;server&quot;&gt;&lt;/asp:Label&gt;&lt;asp:TextBox ID=&quot;txtTeste2&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;&lt;/p&gt;
&lt;/div&gt;</pre></div></div>

<p>Ao executar a aplicação, teremos a seguinte tela:</p>
<p><img src="image/tela_web_control.png" alt="Tela Web Control" /></p>
<p>Clique com o botão direito e selecione codigo-fonte e veja o código gerado </p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;teste&quot;&gt;
        &lt;h3&gt;Controles ASP.Net&lt;/h3&gt;
        &lt;p&gt;&lt;span id=&quot;lblTeste1&quot;&gt;label 1&lt;/span&gt;&lt;/p&gt;
        &lt;p&gt;literal 1&lt;/p&gt;
        &lt;p&gt;&lt;label for=&quot;txtTeste2&quot; id=&quot;lblTeste2&quot;&gt;label 2&lt;/label&gt;&lt;input name=&quot;txtTeste2&quot; type=&quot;text&quot; id=&quot;txtTeste2&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;</pre></div></div>

<p>Repare no código gerado. O controle <strong>Label</strong> renderiza o texto interno das <strong>tags span</strong>, que na maioria das vezes é desnecessário. Isso aumenta a quantidade de código a ser trafego do servidor para o cliente. Neste caso que só queriamos a apresentação de um texto, damos preferência ao <strong>Literal</strong>, que renderiza somente o texto de uma forma estática sem geração de tags.<br />
A principal vantagem do Label é quando necessitamos de associa-lo a um outro controle. Que é feito por meio do atributo <em>AssociatedControlID</em>.<br />
Assim é gerado as <strong>tags label</strong> que são utilizadas para dar foco a um outro controle.</p>
<p>Até mais<br />
 <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2009/12/quando-utilizar-literal-e-label/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

