<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4778552564217816273</atom:id><lastBuildDate>Wed, 11 Sep 2024 23:38:23 +0000</lastBuildDate><category>.NET</category><category>C#</category><category>MVC .NET</category><title>Blog do Robson</title><description>Um Blog que traz a você todas as novidades sobre Informática, Tecnologia, Gadgets, Autos, Motos e muito mais.</description><link>http://robsonrezini.blogspot.com/</link><managingEditor>noreply@blogger.com (Robson V. Rezini)</managingEditor><generator>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4778552564217816273.post-6400342212757691674</guid><pubDate>Sat, 18 Sep 2010 16:13:00 +0000</pubDate><atom:updated>2010-09-18T09:53:38.884-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Casas decimais, arredondamentos e totais</title><description>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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSn9jdbZIbVMfsUTwMsTMF0vXvUPh6BjTqyvQ8SMdIzxhEaj9mHhF_MxZJM2u1PUhyQOAHSWU1PbzoxejljmELf5BC9br5CUvKKvhtzCU1hUw8ec_0MAUnDGZss6qERzjFughmKS1whWk-/s1600/Capturar.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 423px; height: 306px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSn9jdbZIbVMfsUTwMsTMF0vXvUPh6BjTqyvQ8SMdIzxhEaj9mHhF_MxZJM2u1PUhyQOAHSWU1PbzoxejljmELf5BC9br5CUvKKvhtzCU1hUw8ec_0MAUnDGZss6qERzjFughmKS1whWk-/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEIrgKZAIFiGv-woXXeeqHwbsij00VUXtlXn3IMcupVBbIbjqGpNiSSjz1oOSMBAW5-Q5DmPTrYQQnpfq2o_uXkkRvDiSGoVNWgtLw1gHpdo6aGKPovJwkryOwEkWY88HV5CId1S5Ogl44/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEIrgKZAIFiGv-woXXeeqHwbsij00VUXtlXn3IMcupVBbIbjqGpNiSSjz1oOSMBAW5-Q5DmPTrYQQnpfq2o_uXkkRvDiSGoVNWgtLw1gHpdo6aGKPovJwkryOwEkWY88HV5CId1S5Ogl44/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.</description><link>http://robsonrezini.blogspot.com/2010/09/casas-decimais-arredondamentos-e-totais.html</link><author>noreply@blogger.com (Robson V. Rezini)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSn9jdbZIbVMfsUTwMsTMF0vXvUPh6BjTqyvQ8SMdIzxhEaj9mHhF_MxZJM2u1PUhyQOAHSWU1PbzoxejljmELf5BC9br5CUvKKvhtzCU1hUw8ec_0MAUnDGZss6qERzjFughmKS1whWk-/s72-c/Capturar.PNG" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4778552564217816273.post-8878444505764626372</guid><pubDate>Wed, 15 Sep 2010 22:41:00 +0000</pubDate><atom:updated>2010-09-15T16:41:58.705-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC .NET</category><title>ASP.NET MVC 3 - Novas funções e característica</title><description>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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNOI4mShknH01W1kwiRQnaBZiOhmCwGPvS59k6CqKSsQ7K2gQ4omZPFewk5hTIxmLDqgFKusDqygQceWaT6hK-uPPCuExaVuPLHo-XTGPutyKTZ-1K-sImj3RSE_AYIbP86R6YvIwD2Mdl/"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 570px; height: 146px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNOI4mShknH01W1kwiRQnaBZiOhmCwGPvS59k6CqKSsQ7K2gQ4omZPFewk5hTIxmLDqgFKusDqygQceWaT6hK-uPPCuExaVuPLHo-XTGPutyKTZ-1K-sImj3RSE_AYIbP86R6YvIwD2Mdl/" 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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtScOSOuGTPsM2nxCc2LUK47A28gU9-wdXIzia4999pNWpVfJTFXKTPloNdKOn-URuWwIFh80lC1Kct8_LY8RNM0QOZWMlGSbENz0f-ppFtaxn-hGfRNoP8MYfUB2Y2UB1dDigswXBA-dL/s640/MVCComRazor3.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 640px; height: 494px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtScOSOuGTPsM2nxCc2LUK47A28gU9-wdXIzia4999pNWpVfJTFXKTPloNdKOn-URuWwIFh80lC1Kct8_LY8RNM0QOZWMlGSbENz0f-ppFtaxn-hGfRNoP8MYfUB2Y2UB1dDigswXBA-dL/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWfOokFIRUoyQE0wEfbq28j7acS5rSPTw1cLyzxsHa_Uz52Lp3qT6F9CRyT-leNc7XTMKtVg2nryecAjpNZfGegtW98MlO-K3ueNoEIusiGc6cwNYZZ1dw-buE2D-7PE8a6HompuxY_UN5/s1600/MVCComRazor5.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 314px; height: 121px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWfOokFIRUoyQE0wEfbq28j7acS5rSPTw1cLyzxsHa_Uz52Lp3qT6F9CRyT-leNc7XTMKtVg2nryecAjpNZfGegtW98MlO-K3ueNoEIusiGc6cwNYZZ1dw-buE2D-7PE8a6HompuxY_UN5/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZbmQ245QcEqqj-qCmHmF1DqHSVUB1dnmljd6M0yiE1vrzrspRCDjDuAGE_BAsJ6fHsy9RK2SuB0W24tOEYEaqsRW8wWR_EVG2v7tZTo759cGrzGM_1LV5MVp4_AaYkd-er9gaBaA3mCc/s1600/MVCComRazor6.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 167px; height: 68px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZbmQ245QcEqqj-qCmHmF1DqHSVUB1dnmljd6M0yiE1vrzrspRCDjDuAGE_BAsJ6fHsy9RK2SuB0W24tOEYEaqsRW8wWR_EVG2v7tZTo759cGrzGM_1LV5MVp4_AaYkd-er9gaBaA3mCc/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRvuQo-Q8Ipoew4YHCijUcmvm4_NMKWY0dj4q2YGMUciKJ6GqoQNndaitxfBTX6CESMhyTGadRHdztqPKXtx5lRs54tx7AaoByuYS018Rbwk64g4q-LBL1e744m5ZAngQRWaaI-nI4Qlei/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRvuQo-Q8Ipoew4YHCijUcmvm4_NMKWY0dj4q2YGMUciKJ6GqoQNndaitxfBTX6CESMhyTGadRHdztqPKXtx5lRs54tx7AaoByuYS018Rbwk64g4q-LBL1e744m5ZAngQRWaaI-nI4Qlei/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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyqNfEnT09JvFqdKFniZgbMRlKDfNbRtrEaa9wBxHsCJGjYSsoGpJBJItug5stylOQoGmYffzle2SY-ROxOmOyUmTJW42RP81G8-2V5wAnFHpA4WeLV15u2o80id3RZu0s2MSp2DKBTDPH/"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 478px; height: 472px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyqNfEnT09JvFqdKFniZgbMRlKDfNbRtrEaa9wBxHsCJGjYSsoGpJBJItug5stylOQoGmYffzle2SY-ROxOmOyUmTJW42RP81G8-2V5wAnFHpA4WeLV15u2o80id3RZu0s2MSp2DKBTDPH/" 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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs26WExIAEfgw-jp_kt708gFv8r8tODUSKmvNH_Ca-KbPw8u7Sbvh5W-wYs3ZpoQu0jDHcJk6GVFXiNsDdZ4N0Zo7OWTMCXo-BGsDdAkKGkRsImtMuRBpyY_cVfxWEybaZi_-oGgy-XEXf/"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 671px; height: 219px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs26WExIAEfgw-jp_kt708gFv8r8tODUSKmvNH_Ca-KbPw8u7Sbvh5W-wYs3ZpoQu0jDHcJk6GVFXiNsDdZ4N0Zo7OWTMCXo-BGsDdAkKGkRsImtMuRBpyY_cVfxWEybaZi_-oGgy-XEXf/" 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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp6FeNcM6pe9PGToFWxesrADvQLlgqIQemMrdw6461a6HjDG3glFVvcI5dqwK1Zm8pDT2bVf28IVRY5tmTThTTdLjKjd3NmjeK5juZSFia3JxyRMt4voiQEV-_UylqLytcdfmWJxYUaK6y/"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 633px; height: 271px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp6FeNcM6pe9PGToFWxesrADvQLlgqIQemMrdw6461a6HjDG3glFVvcI5dqwK1Zm8pDT2bVf28IVRY5tmTThTTdLjKjd3NmjeK5juZSFia3JxyRMt4voiQEV-_UylqLytcdfmWJxYUaK6y/" 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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG447VK8-06CwnWpRpmHsOXZvrwADpIUejF0S2SEB2kTdHpe_EV180VFZuIx3dESBkYj9MRm8Fdi_MQAXh1-DDmSuxFpvE-sxpD0po9-LsyMTGrUkY2o33dFU1wusjkwGfRd3Z2BXlB-S2/s1600/MVCComRazor11.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 276px; height: 148px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG447VK8-06CwnWpRpmHsOXZvrwADpIUejF0S2SEB2kTdHpe_EV180VFZuIx3dESBkYj9MRm8Fdi_MQAXh1-DDmSuxFpvE-sxpD0po9-LsyMTGrUkY2o33dFU1wusjkwGfRd3Z2BXlB-S2/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;.</description><link>http://robsonrezini.blogspot.com/2010/09/aspnet-mvc-3-novas-funcoes-e.html</link><author>noreply@blogger.com (Robson V. Rezini)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNOI4mShknH01W1kwiRQnaBZiOhmCwGPvS59k6CqKSsQ7K2gQ4omZPFewk5hTIxmLDqgFKusDqygQceWaT6hK-uPPCuExaVuPLHo-XTGPutyKTZ-1K-sImj3RSE_AYIbP86R6YvIwD2Mdl/s72-c" width="72"/><thr:total>0</thr:total></item></channel></rss>