mithun_daa
mithun_daa

Reputation: 4384

Handle GUIDs in ASP.Net MVC 3

I have a bunch of tables in my database that have a column which is of type GUID. I do not want this to be a part of scaffolding when i generate my views, so i am using [ScaffoldColumn(false)]. I don't want the user to enter an actual GUID when "creating" a new entity. Is there any way to automate the process of automatically adding a new GUID (thru data annotations or some other way??) when a user creates a new Entity or do i have to modify the controller for every table that has a GUID so that every time a user creates a new entry i make sure i generate a new GUID before saving it?

Thanks.

Upvotes: 0

Views: 1822

Answers (1)

Ben Foster
Ben Foster

Reputation: 34800

This is where (IMHO) the new scaffolding features encourages bad code.

You should define separate ViewModels for your views. These contain only the fields you wish the user to change along with any view specific validation/rules.

Within your controller action, you can check whether the user input is valid (ModelState.IsValid) and if so, do some lefty-righty mapping between your ViewModel properties and those of your entity.

See ViewModel Best Practices for more details.

However, to answer your question, you can use the HiddenInput attribute on an Id field so that it is rendered as a <input type="hidden"...

With regard with setting the Id, create a base class for your entities e.g:

public abstract class BaseEntity {
    public Guid Id {get;set;}
    public BaseEntity() {
        Id = Guid.NewGuid();
    }
}

You can then inherit your entities from this class and when you call new MyEntity() the base class constructor will be invoked, thus setting the Id.

Upvotes: 4

Related Questions