ASP.NET MVC 3’s output caching system no longer requires you
to specify a VaryByParam property when declaring an [OutputCache] attribute on
a Controller action method. MVC3 now automatically varies the output
cached entries when you have explicit parameters on your action method –
allowing you to cleanly enable output caching on actions using code like below:

In addition to supporting full page output caching, ASP.NET
MVC 3 also supports partial-page caching – which allows you to cache a region
of output and re-use it across multiple requests or controllers. The
[OutputCache] behavior for partial-page caching was updated with RC2 so that
sub-content cached entries are varied based on input parameters as opposed to
the URL structure of the top-level request – which makes caching scenarios both
easier and more powerful than the behavior in the previous RC.
@model declaration does not add whitespace
In earlier previews, the strongly-typed @model declaration
at the top of a Razor view added a blank line to the rendered HTML output. This
has been fixed so that the declaration does not introduce whitespace.
Changed "Html.ValidationMessage" Method to Display
the First Useful Error Message
The behavior of the Html.ValidationMessage() helper was
updated to show the first useful error message instead of simply displaying the
first error.
During model binding, the ModelState dictionary can be
populated from multiple sources with error messages about the property,
including from the model itself (if it implements IValidatableObject), from
validation attributes applied to the property, and from exceptions thrown while
the property is being accessed.
When the Html.ValidationMessage() method displays a
validation message, it now skips model-state entries that include an exception,
because these are generally not intended for the end user. Instead, the method
looks for the first validation message that is not associated with an exception
and displays that message. If no such message is found, it defaults to a
generic error message that is associated with the first exception.
RemoteAttribute “Fields” -> “AdditionalFields”
ASP.NET MVC 3 includes built-in remote validation support
with its validation infrastructure. This means that the client-side
validation script library used by ASP.NET MVC 3 can automatically call back to
controllers you expose on the server to determine whether an input element is
indeed valid as the user is editing the form (allowing you to provide real-time
validation updates).
You can accomplish this by decorating a model/viewmodel
property with a [Remote] attribute that specifies the controller/action that
should be invoked to remotely validate it. With the RC this attribute had
a “Fields” property that could be used to specify additional input elements
that should be sent from the client to the server to help with the validation
logic. To improve the clarity of what this property does we have renamed
it to “AdditionalFields” with today’s RC2 release.
ViewResult.Model and ViewResult.ViewBag Properties
The ViewResult class now exposes both a “Model” and
“ViewBag” property off of it. This makes it easier to unit test
Controllers that return views, and avoids you having to access the Model via
the ViewResult.ViewData.Model property.