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?
LinqSchema01.jpg
UserController.jpg
ViewPage.jpg
veruthandaiAsked:
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);  
0
 
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.
0
 
veruthandaiAuthor Commented:
@TheLearnedOne

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.

@MogalManic
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?
0
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.
0
 
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.
0
 
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.
0
 
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.
0
 
Bob LearnedCommented:
Is the model a single class, or a collection of mutiple classes?
0
 
veruthandaiAuthor Commented:
The model is a "User", there's a screenshot of the schema in the original post.
User
- Id
- Name
 
Password
- Id
- Hash
- UserId
 
So User.Passwords would be a collection in the Model that is being passed to the View.
0
 
MogalManicCommented:
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, "*") %>
0
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.