views:

37

answers:

2

The question is in the title, actually - let's say I have a simple class like this:

public class Product {
   public Int32 ID { get; set; }
   public String Name { get; set; }
   //...
}

When I use it in action method, like this:

public ViewResult DoSomething([Bind(Exclude="ID")]Product product] {
 //...
}

what value will product.ID have inside this action method? Maybe it will be default value for Int32? And null in case ID is reference-type? I'm just interested, didn't find it on the web.

A: 

The DefaultModelBinder, which you are using if nothing else is specified, indeed uses default(T) for unbound values.

To change this, you can modify binding behavior per-parameter in action methods (as you are doing with the BindAttribute in your example), or per-type in eg. Global.asax.

bzlm
+1  A: 

Since there will be no initialization at all, the property will have its default value.

Thomas Weller
and if it's initialized but excluded from model binding with Exclude?
chester89
Binding is not allowed for properties in the Exclude list, so the DefaultModelBinder will not attempt to bind them. They will not affect the ModelState either.
bzlm