Separate Models in ASP.NET MVC

I've got a Users table, and a Password table. The password table references the Users table, because each time the user creates/changes their password, the old one is kept in log and encrypted for logging reasons.

I'm a bit new to MVC, so let me show you what the problem is. I'm confused as to how I bind this to my Create View.

Any ideas on how I should approach this with the view page?
Who is Participating?
MogalManicConnect With a Mentor Commented:
I would  create a model that reads in the User and Password joined together.  When a new userName/Password is commited to the database,  the presenter will make two calls to the model:
   UserModel.CreateUser(id, Name, Email)
   UserModel.CreatePassword(id, PasswordHash, UserID);  
Bob LearnedCommented:
The Model should have the data, the View should display the model, and the controller should have a reference to the model and the view.
veruthandaiAuthor Commented:

Yes, I understand what you mean, but the problem is that the View references the User Model - and the "Password" model is a different model entirely.

This isn't a bad approach, but I can't believe this is how people typically handle this in MVC - seeing as it would be an extremely common thing with the way ORM is designed. There is no way to reference a secondary model within a view?
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Bob LearnedCommented:
With MVP/MVC, the model and the view should be separate.  The controller should be the go-between for the model and the view.  I have seen some implementations where the view and controller are combined, but I believe that goes against the MVP/MVC grain.  The model and the view are independent so that you can have multiple views on the same model, or define the same pattern for both a Windows Forms or web site application.
veruthandaiAuthor Commented:
Yes, but the Password is part of the Model, but not a static part of it. It is like an array that is attached to the Model. So it is still part of the model. What I need to figure out how to do is to bind one of the text fields so that it will validate with the password object.
Bob LearnedCommented:
The controller can define an instance of the model, get to the password, and validate it.  The controller should have the business logic, and not the view or the model.
veruthandaiAuthor Commented:
Alright, but how does one do that? How do I create an instance of the password to pass to the view when I can only define the View to handle an instance of a User? That's more what I'm getting at. I think we're both trying to say the same thing, except I don't understand where to go from just understanding what has to happen.
Bob LearnedCommented:
Is the model a single class, or a collection of mutiple classes?
veruthandaiAuthor Commented:
The model is a "User", there's a screenshot of the schema in the original post.
- Id
- Name
- Id
- Hash
- UserId
So User.Passwords would be a collection in the Model that is being passed to the View.
For simplicity, I would add a CurrentPassword property which would be something like this:
public string CurrentPassword
  get {return this.Passwords[0];}
  set {this.Passwords.Insert(0, value);  //Add new password, pushing old password into Passwords[1]}

That way on your View Page you just have to do this:
<% Html.Password(CurrentPassword, "*") %>
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.