Future preview refreshes of ASP.NET MVC 3 will include
better support for unobtrusive JavaScript. ASP.NET MVC 3 will also
directly support the jQuery Validation library from within its built-in
validation helper methods.
Model Validation Improvements
ASP.NET MVC 2 came with significant model validation
improvements. You can read my previous blog post to learn more about them.
ASP.NET MVC 3 extends this work further, and adds support
for several of the new validation features introduced within the
System.ComponentModel.DataAnnotations namespace in .NET 4. In particular:
MVC 3 supports the new .NET 4 DataAnnotations metadata
attributes such as DisplayAttribute.
MVC 3 supports the improvements made to the
ValidationAttribute class in .NET 4. The ValidationAttribute class was
improved in .NET 4 to support a new IsValid overload that provides more
information about the current validation context, such as what object is being
validated. This enables richer scenarios where you can validate the
current value based on another property of the model.
MVC 3 supports the new IValidatableObject interface
introduced in .NET 4. The IValidatableObject interface enables you to
perform model-level validation, and enables you to provide validation error
messages specific to the state of the overall model, or between two properties
within the model.
Below is an example of using the IValidatableObject
interface built-into .NET 4 to implement a custom validation method on a
class. This method can apply validation rules across multiple properties
and yield back multiple validation errors (and optionally include both an error
message like below as well as a list of property names that caused the
violation):
ASP.NET MVC 3 now honors the IValidateObject interface when
model binding (in addition to all of the other validation approaches it already
supported with MVC 2), and will retrieve validation errors from it and
automatically flag/highlight impacted fields within a view using the built-in
HTML form helpers:
ASP.NET MVC 3 also introduces a new IClientValidatable
interface that allows ASP.NET MVC to discover at runtime whether a validator
has support for client validation. This interface has been designed so
that it can be integrated with a variety of validation frameworks. MVC 3
also introduces a new IMetadataAware interface that simplifies how you can
contribute to the ModelMetadata creation process.
Dependency Injection Improvements
ASP.NET MVC 3 provides better support for applying
Dependency Injection (DI) and integrating with Dependency Injection/IOC
containers.
In “Preview 1”, we’ve added support for dependency injection
in the following places:
Controllers (registering & injecting controller
factories, injecting controllers)
Views (registering & injecting view engines, injecting
dependencies into view pages)
Action Filters (locating & injecting filters)
For future previews we are investigating adding dependency
injection support for:
Model Binders (registering & injecting)
Value Providers (registering & injecting)
Validation Providers (registering & injecting)
Model metadata Providers (registering & injecting)
ASP.NET MVC 3 will support the Common Service
Locator library, and any DI container that supports it’s IServiceLocator
interface. This will make it really easy to integrate any DI container
that supports the Common Service Locator with ASP.NET MVC.
Note: In Preview 1, we redefined the CSL interface in our
codebase, and didn’t include the CSL DLL in our setup. This means that existing
implementations of CSL won’t “just work” with “preview 1” – instead they’ll
have to recompile their CSL implementations against our interface to make them
work. Future preview refreshes will make this CSL library dependency easier,
and avoid this extra step.
Brad Wilson is starting a great blog series on ASP.NET MVC
3’s Dependency Injection Support. Below are links to his first few
articles about it:
ASP.NET MVC 3 Service Location: Introduction (Part 1)
ASP.NET MVC 3 Service Location: Controllers (Part 2)
ASP.NET MVC 3 Service Location: Views (Part 3)
ASP.NET MVC 3 Service Location: Filters (Part 4)
Click here to download a simple ASP.NET MVC 3 example that demonstrates
how to use the popular Ninject
Dependency Injection Container with ASP.NET MVC 3.