Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Example of an ASP.NET MVC post model?

I was watching the HaHaa presentation on ASP.NET MVC from MIX and they mentioned using a Post Model where I guess they were saying you could use a model that was ONLY for posting. I have tried looking for examples for this. Am I not understanding what they are saying? Does anyone have an example of how this might work in a strongly typed view where the view model and post model are not of the same type?

like image 304
Anthony Potts Avatar asked Dec 28 '22 21:12

Anthony Potts


2 Answers

Below is ScottGu's example expanded a bit. As @SLaks explained, when the POST is received, MVC will try to create a new MyPostName object and match its properties with the from fields. It will also update the ModelState property with the results of the matching and validation.

When the action returns the view, it has to provide a model for it as well. However, the view doesn't have to use that same model. In fact, the view can be strongly typed with a different model, that contains the expanded data, for example it can have navigation properties bound to external keys in the DB table; and if that's the case, the logic to map from the POST model to the view model will be contained in the POST action.

public class MyGetModel
{
    string FullName;
    List<MyGetModel> SuggestedFriends;
}

public class MyPostModel
{
    string FirstName;
    string LastName;
}

//GET: /Customer/Create
public ActionResult Create()
{
    MyGetModel myName = new MyGetModel();
    myName.FullName = "John Doe"; // Or fetch it from the DB
    myName.SuggestedFriends = new List<MyGetModel>; // For example - from people select name where name != myName.FullName
    Model = myName;
    return View();
}

//POST: /Customer/Create
[HttpPost]
public ActionResult Create(MyPostModel newName)
{
    MyGetModel name = new MyGetModel();
    name.FullName = newName.FirstName + "" + newName.LastName; // Or validate and update the DB 
    return View("Create", name);
}
like image 62
Franci Penov Avatar answered Jan 17 '23 13:01

Franci Penov


The POST model would only be used to pass the data into your action method.

The model that the POST action sends to its view doesn't need to be related to the model that it received (and usually will not be).
Similarly, the model that the initial GET action (that shows the form in the first place) passes to its view (which submits to the POST action) doesn't need to be related to the model that the POST action takes (although it usually will be the same model)

As long as it has properties that match your input parameters, you can use any model you want for the parameter to the POST action.

like image 34
SLaks Avatar answered Jan 17 '23 14:01

SLaks