<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4778552564217816273</id><updated>2012-02-16T07:31:29.566-08:00</updated><category term='C#'/><category term='MVC .NET'/><category term='.NET'/><title type='text'>Blog do Robson</title><subtitle type='html'>Desbravando o mundo da programação.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://robsonrezini.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4778552564217816273/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://robsonrezini.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robson V. Rezini</name><uri>http://www.blogger.com/profile/11332150134746774698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://2.bp.blogspot.com/_rWWORlur_0o/TJDX6koNEmI/AAAAAAAAAw4/709ktvWlNvo/s1600-R/browse.php%3Fu%3DOi8vMi5icC5ibG9nc3BvdC5jb20vX3JXV09SbHVyXzBvL1NpWGNmeDg3VTlJL0FBQUFBQUFBQUdjL3RQUDVfOE4yVmFZL1MyMjAvRFNDMDA3OTAuSlBH%26b%3D1'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4778552564217816273.post-6400342212757691674</id><published>2010-09-18T09:13:00.000-07:00</published><updated>2010-09-18T09:53:38.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Casas decimais, arredondamentos e totais</title><content type='html'>Problemas com casas decimais, arredondamentos e totais existe em muitos aplicativos, no .NET, no Excel, no Access e em muitos outros, creio até que muitos dos leitores já tiveram este tipo de problema, principalmente os que trabalham programando sistemas que envolvem algum módulo financeiro.&lt;br /&gt;Imagine que você esteje programando uma rotina que é responsável por listar uma composição de preço de um determinado produto que é composto por outros produtos, ou seja,possui alguns itens com preços, conforme exemplo abaixo:&lt;br /&gt;&lt;br /&gt;Produto: Coleção Engrenagens XPTO&lt;br /&gt;  Composição&lt;br /&gt;    &lt;table border="0" cellpadding="0" cellspacing="0" width="314"&gt;&lt;col style="width: 48pt;" width="64"&gt;  &lt;col style="width: 92pt;" width="122"&gt;  &lt;col style="width: 48pt;" span="2" width="64"&gt;  &lt;tbody&gt;&lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl68" style="height: 15.75pt; width: 48pt;" height="21" width="64"&gt;Item&lt;/td&gt;   &lt;td class="xl69" style="border-left: medium none; width: 92pt;" width="122"&gt;Descrição&lt;/td&gt;   &lt;td class="xl69" style="border-left: medium none; width: 48pt;" width="64"&gt;Qtd.&lt;/td&gt;   &lt;td class="xl70" style="border-left: medium none; width: 48pt;" width="64"&gt;Valor&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl71" style="height: 15pt;" height="20"&gt;1&lt;/td&gt;   &lt;td class="xl66" style="border-left: medium none;"&gt;Engrenagem XPTO&lt;/td&gt;   &lt;td class="xl65" style="border-left: medium none;"&gt;1&lt;/td&gt;   &lt;td class="xl72" style="border-left: medium none;"&gt;1,2327&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl73" style="height: 15.75pt; border-top: medium none;" height="21"&gt;2&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none;"&gt;Engrenagem XPTO&lt;/td&gt;   &lt;td class="xl74" style="border-top: medium none; border-left: medium none;"&gt;1&lt;/td&gt;   &lt;td class="xl75" style="border-top: medium none; border-left: medium none;"&gt;1,2327&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Valor Total do Produto: 2,4654&lt;br /&gt;&lt;br /&gt;O total seria 2,4654 e arredondando seria 2,47 (Pode usar qualquer função "Round()" que você vai verificar isso).&lt;br /&gt;Não, não é tão fácil assim como parece, imagine que o seu cliente trabalho com composição de preços com quatro casas decimais, mas ele quer que o usuário visualize somente duas casas decimais, eis aí que surge um problema.&lt;br /&gt;Veja como ficaria a listagem:&lt;br /&gt;&lt;br /&gt;Produto: Motor XPTO&lt;br /&gt;  Composição&lt;br /&gt;    &lt;table border="0" cellpadding="0" cellspacing="0" width="420"&gt;&lt;col style="width: 48pt;" width="64"&gt;  &lt;col style="width: 92pt;" width="122"&gt;  &lt;col style="width: 48pt;" span="2" width="64"&gt;  &lt;col style="width: 80pt;" width="106"&gt;  &lt;tbody&gt;&lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl68" style="height: 15.75pt; width: 48pt;" height="21" width="64"&gt;Item&lt;/td&gt;   &lt;td class="xl69" style="border-left: medium none; width: 92pt;" width="122"&gt;Descrição&lt;/td&gt;   &lt;td class="xl69" style="border-left: medium none; width: 48pt;" width="64"&gt;Qtd.&lt;/td&gt;   &lt;td class="xl69" style="border-left: medium none; width: 48pt;" width="64"&gt;Valor&lt;/td&gt;   &lt;td class="xl75" style="border-left: medium none; width: 80pt;" width="106"&gt;Valor   "Round()"&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15pt;" height="20"&gt;   &lt;td class="xl70" style="height: 15pt;" height="20"&gt;1&lt;/td&gt;   &lt;td class="xl66" style="border-left: medium none;"&gt;Engrenagem XPTO&lt;/td&gt;   &lt;td class="xl65" style="border-left: medium none;"&gt;1&lt;/td&gt;   &lt;td class="xl65" style="border-left: medium none;"&gt;1,2327&lt;/td&gt;   &lt;td class="xl74" style="border-left: medium none;"&gt;1,23&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 15.75pt;" height="21"&gt;   &lt;td class="xl71" style="height: 15.75pt; border-top: medium none;" height="21"&gt;2&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none;"&gt;Engrenagem XPTO&lt;/td&gt;   &lt;td class="xl72" style="border-top: medium none; border-left: medium none;"&gt;1&lt;/td&gt;   &lt;td class="xl72" style="border-top: medium none; border-left: medium none;"&gt;1,2327&lt;/td&gt;   &lt;td class="xl73" style="border-top: medium none; border-left: medium none;"&gt;1,23&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Valor Total do Produto: 2,4654&lt;br /&gt;Valor Total do Produto com duas casas: 1,23 + 1,23 = 2,46&lt;br /&gt;&lt;br /&gt;Arredondando o Valor do produto com quatro casas: Round(2,4654) = 2,47 !!!&lt;br /&gt;Opa! Alguma coisa deu errado! Mas o que foi? Os resultados não batem, há uma diferença de um centavo. Onde ficou esse um centavo?&lt;br /&gt;Esse centavo ficu no arredondamento, sim, quando arredondamos o 1,2327 , perdemos 0,0027.&lt;br /&gt;Todos já conhecem a regra de arredondamento não? Aqui na &lt;a href="http://www.blogger.com/%28http://pt.wikipedia.org/wiki/Arredondamento%29"&gt;wikipedia &lt;/a&gt;você encontra o seu funcionamento.&lt;br /&gt;Como todos os aplicativos geralmente seguem essa regra de arredondamento, acabamos perdendo alguns centavos. Isso não é um problema de qualquer aplicativo ou linguagem e sim um problema da regra utilizada.&lt;br /&gt;Mas como não podemos mudar a regra, temos que achar uma forma de trabalhar com os arredondamentos sem mostrar ao usuário o erro que é gerado, ou seja, precisamos "excluir" esses centavos a mais que o arredondamento faz.&lt;br /&gt;Devemos então trabalhar da seguinte forma: Sempre antes de executar um cálculo que será visualizado em menos casas decimais do que os seu operadores, devemos antes, arredondar os operadores para fazer o cálculo, sendo assim, o usuário sempre vai visualizar os dados efetivos que foram calculados e não o seu arredondamento executado depois do cálculo.&lt;br /&gt;Veja o exemplo abaixo em C#:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_rWWORlur_0o/TJTuAFuUGEI/AAAAAAAAAzM/46GsLDSsRy8/s1600/Capturar.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 423px; height: 306px;" src="http://3.bp.blogspot.com/_rWWORlur_0o/TJTuAFuUGEI/AAAAAAAAAzM/46GsLDSsRy8/s400/Capturar.PNG" alt="" id="BLOGGER_PHOTO_ID_5518297128739543106" border="0" /&gt;&lt;/a&gt;Quando arredondamos depois de fazer o cálculo para exibir para o usuário, poderá ocorrer esse erro dos centavos no arredondamento, mas se fazemos o arredondamento dos operadores antes de executar o cálculo, os dados sempre vão "bater".&lt;br /&gt;Veja como o Excel também se perde:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_rWWORlur_0o/TJTuASigWUI/AAAAAAAAAzU/DRb7gP0jJyE/s1600/Sem+t%C3%ADtulo.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 154px; height: 400px;" src="http://4.bp.blogspot.com/_rWWORlur_0o/TJTuASigWUI/AAAAAAAAAzU/DRb7gP0jJyE/s400/Sem+t%C3%ADtulo.png" alt="" id="BLOGGER_PHOTO_ID_5518297132179675458" border="0" /&gt;&lt;/a&gt;Em resumo, sempre cheque bem os seus códigos fontes para que não ocorram problemas com os arredondamentos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4778552564217816273-6400342212757691674?l=robsonrezini.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://robsonrezini.blogspot.com/feeds/6400342212757691674/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://robsonrezini.blogspot.com/2010/09/casas-decimais-arredondamentos-e-totais.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4778552564217816273/posts/default/6400342212757691674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4778552564217816273/posts/default/6400342212757691674'/><link rel='alternate' type='text/html' href='http://robsonrezini.blogspot.com/2010/09/casas-decimais-arredondamentos-e-totais.html' title='Casas decimais, arredondamentos e totais'/><author><name>Robson V. Rezini</name><uri>http://www.blogger.com/profile/11332150134746774698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://2.bp.blogspot.com/_rWWORlur_0o/TJDX6koNEmI/AAAAAAAAAw4/709ktvWlNvo/s1600-R/browse.php%3Fu%3DOi8vMi5icC5ibG9nc3BvdC5jb20vX3JXV09SbHVyXzBvL1NpWGNmeDg3VTlJL0FBQUFBQUFBQUdjL3RQUDVfOE4yVmFZL1MyMjAvRFNDMDA3OTAuSlBH%26b%3D1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_rWWORlur_0o/TJTuAFuUGEI/AAAAAAAAAzM/46GsLDSsRy8/s72-c/Capturar.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4778552564217816273.post-8878444505764626372</id><published>2010-09-15T15:41:00.000-07:00</published><updated>2010-09-15T16:41:58.705-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC .NET'/><title type='text'>ASP.NET MVC 3 - Novas funções e característica</title><content type='html'>Muitas pessoas já estão se utilizando da nova versão do MVC, o MVC 3, que foi lançado recentemente. Mas que funções e características novas ele nos trás?&lt;br /&gt;Bem, vou enumerar algumas e explicar brevemente o que elas fazem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Razor View Engine&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Talvez a mais badalada e que nos provém mais flexibilidade na hora de programar. O Razor Engine View é um novo view engine que nos provém a capacidade de programar as Views do MVC utilizando a sintaxe Razor (juntando-se agora às outras três, &lt;a href="http://sparkviewengine.com/"&gt;Spark&lt;/a&gt;, &lt;a href="http://code.google.com/p/nhaml/wiki/NHamlLanguageReference"&gt;NHaml &lt;/a&gt;e o tradicional ASPX.&lt;br /&gt;A engine view ASPX nos leva ao clássico ASP, utilizando a sintaxe &lt;%= %&gt; ou a mais nova &lt;%: %&gt; que predominam nos deus códigos, juntos das Master Pages e os controles ASPC.&lt;br /&gt;A engine view Spark (utilizada também no projeto MonoRail Castle) é um pouco diferente, suporta placeholders e mistura livremente HTML com código de programação, utilizando atributos e tags especiais. A vantagem dela é de ser completamente compatível com o XML.&lt;br /&gt;A engine view NHaml é uma implementação para o .NET da linguagem d emarkup Haml, e não utiliza a síntaxe parecendo um XML. Existe ainda a possibilidade de você implementar uma &lt;a href="http://www.singingeels.com/Articles/Creating_a_Custom_View_Engine_in_ASPNET_MVC.aspx"&gt;view engine para o mvc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_rWWORlur_0o/TJFPPLMzB_I/AAAAAAAAAxs/YP-ehu5BMYI/MVCComRazor4.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 570px; height: 146px;" src="http://lh5.ggpht.com/_rWWORlur_0o/TJFPPLMzB_I/AAAAAAAAAxs/YP-ehu5BMYI/MVCComRazor4.png" alt="" border="0" /&gt;&lt;/a&gt;Mas voltando ao Razor, sua principal característica é o minimalismo, ou seja, chega daquelas páginas cheias de tags e códigos que ficam entre seu código fonte e você, poluindo toda a sua página. Com ele você consegue escrever em C#, VB.NET e HTML.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_rWWORlur_0o/TJFOWnB9z4I/AAAAAAAAAxk/Td6py3k-fU0/s640/MVCComRazor3.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 640px; height: 494px;" src="http://lh5.ggpht.com/_rWWORlur_0o/TJFOWnB9z4I/AAAAAAAAAxk/Td6py3k-fU0/s640/MVCComRazor3.png" alt="" border="0" /&gt;&lt;/a&gt;Ele é compacto, fácil de aprender, não é uma linguagem nova, trabalha com qualquer editor de texto e suporta &lt;span style="font-style: italic;"&gt;Unit Tests&lt;/span&gt; para suas views. O MVC3 suporta somente Views em Razor que possuem a extensão cshtml e o suporte à VB virá nas próximas versões do MVC 3.&lt;br /&gt;Nesse &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;site &lt;/a&gt;você poderá encotnrar mais conteúdo sobre o Razor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Propriedades &lt;span style="font-style: italic;"&gt;Dynamic View&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;ViewModel &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;É uma nova propriedade dinâmica que está disponível nas Views, e nos provém acesso ao objeto ViewData utilizando uma sixtaxe simples. Por exemplo, se dois itens são adicionados ao &lt;span style="font-style: italic;"&gt;ViewData&lt;/span&gt; na Action &lt;span style="font-style: italic;"&gt;Index &lt;/span&gt;do &lt;span style="font-style: italic;"&gt;Controller &lt;/span&gt;da View, como no código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_rWWORlur_0o/TJFPfJcY8UI/AAAAAAAAAx0/hRP4rTj4T2g/s1600/MVCComRazor5.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 314px; height: 121px;" src="http://4.bp.blogspot.com/_rWWORlur_0o/TJFPfJcY8UI/AAAAAAAAAx0/hRP4rTj4T2g/s320/MVCComRazor5.png" alt="" id="BLOGGER_PHOTO_ID_5517278415035101506" border="0" /&gt;&lt;/a&gt;Essas propriedades podem ser acessadas utilizando-se a seguinte sintaxe:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_rWWORlur_0o/TJFPyNdk6KI/AAAAAAAAAx8/Xju4jqCJYLA/s1600/MVCComRazor6.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 167px; height: 68px;" src="http://4.bp.blogspot.com/_rWWORlur_0o/TJFPyNdk6KI/AAAAAAAAAx8/Xju4jqCJYLA/s320/MVCComRazor6.png" alt="" id="BLOGGER_PHOTO_ID_5517278742531336354" border="0" /&gt;&lt;/a&gt;Esta sintaxe pode ser utilizada no &lt;span style="font-style: italic;"&gt;Controller &lt;/span&gt;também:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_rWWORlur_0o/TJFQiQ4LCII/AAAAAAAAAyE/sz0l2ZPKRm8/s1600/MVCComRazor7.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 127px; font-style: italic; font-weight: bold;" src="http://4.bp.blogspot.com/_rWWORlur_0o/TJFQiQ4LCII/AAAAAAAAAyE/sz0l2ZPKRm8/s320/MVCComRazor7.png" alt="" id="BLOGGER_PHOTO_ID_5517279568081913986" border="0" /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class=" on down" style="display: block;" id="formatbar_Italic" title="Itálico"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Itálico" class="gl_italic" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Suporte à Multiplos View Engines na Janela "&lt;span style="font-style: italic;"&gt;Add View&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A Janela de adição de Views ao projeto do Visual Studio agora dá suporte a seleção de qual Engine View você quer utilizar:&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_rWWORlur_0o/TJFRA4G3Z-I/AAAAAAAAAyM/p3GzNYc9Bo0/MVCComRazor8.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 478px; height: 472px;" src="http://lh4.ggpht.com/_rWWORlur_0o/TJFRA4G3Z-I/AAAAAAAAAyM/p3GzNYc9Bo0/MVCComRazor8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Nova Classe &lt;span style="font-style: italic;"&gt;JsonValueProviderFactory&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Essa classe permite que os Actions de um Controller recebam os dados (parâmetros) em formato JSON.&lt;a href="http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx"&gt; Aqui &lt;/a&gt;você encontra mais sobre esta novidade.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Suporte aos atributos de validação e &lt;span style="font-style: italic;"&gt;IValidatableObject &lt;/span&gt;do .NET Framework 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A classe &lt;span style="font-style: italic;"&gt;ValidationAttribute &lt;/span&gt;foi melhorada no. NET Framework 4 para permitir um suporte melhor à validação. Quando você utiliza um atributo de validação personalizado, você pode usar uma nova sobrecarga, o &lt;span style="font-style: italic;"&gt;IsValid &lt;/span&gt;que fornece uma instânciado objeto &lt;span style="font-style: italic;"&gt;ValidationContext&lt;/span&gt;. Essa instância fornece informações sobre o contecto da validação atual, como qual objeto está sendo validado.&lt;br /&gt;Isso permite que você valide um valor de atributo corrente baseado em uma propriedade do Model. Veja o exemplo abaixo que valida se a &lt;span style="font-style: italic;"&gt;PropriedadeUM &lt;/span&gt;é maior que a &lt;span style="font-style: italic;"&gt;PropriedadeDois&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_rWWORlur_0o/TJFRf--9FaI/AAAAAAAAAyU/1j5Fn1poFSE/MVCComRazor9.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 671px; height: 219px;" src="http://lh6.ggpht.com/_rWWORlur_0o/TJFRf--9FaI/AAAAAAAAAyU/1j5Fn1poFSE/MVCComRazor9.png" alt="" border="0" /&gt;&lt;/a&gt;A Validação do novo MVC também suporte a interface &lt;span style="font-style: italic;"&gt;IValidatableObject &lt;/span&gt;do .NET Framework 4. Essa interface permite que o seu Model implemente uma validação interna, em nível de Model, como este exemplo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_rWWORlur_0o/TJFRzOWZy7I/AAAAAAAAAyc/tuPGxdL2-z0/MVCComRazor10.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 633px; height: 271px;" src="http://lh3.ggpht.com/_rWWORlur_0o/TJFRzOWZy7I/AAAAAAAAAyc/tuPGxdL2-z0/MVCComRazor10.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Suporte aos Atributos de Metadata do .NET Framework 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O ASP.NET MVC 3 agora suporta Atributos de Metadados do .Net Framework 4, como o DisplayAttribute&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;   Novos Action Result Types&lt;/span&gt;&lt;br /&gt;No ASP.NET MVC 3, a classe Controller inclui agora dois novos Action Result Types.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HttpNotFoundResult &lt;/span&gt;Action&lt;br /&gt;Esse novo tipo de retorno de action é utilizado para indicar quando um recurso procurado pela URL corrente não foi encontrado:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_rWWORlur_0o/TJFSP4uFEtI/AAAAAAAAAyk/JVDJad5zNXg/s1600/MVCComRazor11.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 276px; height: 148px;" src="http://4.bp.blogspot.com/_rWWORlur_0o/TJFSP4uFEtI/AAAAAAAAAyk/JVDJad5zNXg/s400/MVCComRazor11.png" alt="" id="BLOGGER_PHOTO_ID_5517281451382739666" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;HttpStatusCodeResult&lt;/span&gt; Action&lt;br /&gt;Esse novo tipo de retorno de action é usado para definir o código de status de resposta e descrição.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Essas são algumas características novas presentes no MVC 3. Caso queira ver todas na íntegra, você pode verificar o site do MVC &lt;a href="http://www.asp.net/mvc"&gt;http://www.asp.net/mvc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Você pode fazer o download do MVC 3 Preview 1 &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;amp;displaylang=en"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4778552564217816273-8878444505764626372?l=robsonrezini.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://robsonrezini.blogspot.com/feeds/8878444505764626372/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://robsonrezini.blogspot.com/2010/09/aspnet-mvc-3-novas-funcoes-e.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4778552564217816273/posts/default/8878444505764626372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4778552564217816273/posts/default/8878444505764626372'/><link rel='alternate' type='text/html' href='http://robsonrezini.blogspot.com/2010/09/aspnet-mvc-3-novas-funcoes-e.html' title='ASP.NET MVC 3 - Novas funções e característica'/><author><name>Robson V. Rezini</name><uri>http://www.blogger.com/profile/11332150134746774698</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://2.bp.blogspot.com/_rWWORlur_0o/TJDX6koNEmI/AAAAAAAAAw4/709ktvWlNvo/s1600-R/browse.php%3Fu%3DOi8vMi5icC5ibG9nc3BvdC5jb20vX3JXV09SbHVyXzBvL1NpWGNmeDg3VTlJL0FBQUFBQUFBQUdjL3RQUDVfOE4yVmFZL1MyMjAvRFNDMDA3OTAuSlBH%26b%3D1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_rWWORlur_0o/TJFPPLMzB_I/AAAAAAAAAxs/YP-ehu5BMYI/s72-c/MVCComRazor4.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
