No edit summary |
No edit summary |
||
Line 92: | Line 92: | ||
</html> | </html> | ||
[[Category:MVC]] | [[Category:MVC]] | ||
[[Category:MDriven Designer]] | [[Category:MDriven Designer]] | ||
[[Category:View Model]] | [[Category:View Model]] | ||
[[Category:Outdated]] |
Revision as of 15:07, 7 November 2018
❗🕜 Warning: this article may contain outdated information. Consider before using any descriptions/solutions, otherwise it still can be helpful. Help : Synonyms and name changes
To get everything to work as in the article you need the latest build (written 131108)
Combobox, picklist or dropdown list – many names for the same thing.
The combobox is perfect when setting references between objects – if the number of items to pick from is not too large.
When creating the viewmodel go like this (Look at the 2 last lines in the Green ViewModelClass and at the blue):
This is automated for you if you want by right clicking:
Modlr knows that “Example1” is a perfect candidate for a Combobox since it is a single link.
You get this:
Modlr suggests Example1.allinstances to be the pick list, but you are free to change it. Maybe you want to add a “->orderby(e|e.attribute1)” there.
To get the whole MVC roundtrip to work – we need to add an identity column to the PickListPresentation class.
I make sure CodeGen is checked and then generate code:
Looking at the generated code for the ViewModel VMExample2 we see this new thing:
Notice that modlr did not only add code for Example1, it also added code for Example1_AsExternalId… And this is important for MVC.
In the View I enter this:
<div class="display-field"> @Html.DropDownListFor(x => x.Example1_AsExternalId, new SelectList(Model.Example1_PickList , //The list "Identity", // What attribute to pick "Presentation", // what to present Model.Example1_AsExternalId)) // what to set on pick </div> <div class="display-field"> @Html.EditorFor(model => model.OwnedBy) // Added this just for info </div>
And I get this:
Then I change in the combo and press save:
The save method needs to do nothing special to make this happen:
[HttpPost] public ActionResult Details(string Identity, VMExample2 offlinevm) { Example2 e2 = EcoSpace.ExternalIds.ObjectForId(Identity).AsObject as Example2; try { VMExample2 onlinevm=VMExample2.Create(EcoSpace, e2); ViewModelHelper.ApplyValues(offlinevm, onlinevm, null); Commit(); return View("Details", onlinevm); } catch { return View("Details", offlinevm); } }