No edit summary |
No edit summary |
||
Line 45: | Line 45: | ||
The save method needs to do nothing special to make this happen: | The save method needs to do nothing special to make this happen: | ||
<html> | |||
<pre class="code"><span style="background: white; color: black"> [</span><span style="background: white; color: #2b91af">HttpPost</span><span style="background: white; color: black">] | |||
</span><span style="background: white; color: blue">public </span><span style="background: white; color: #2b91af">ActionResult </span><span style="background: white; color: black">Details(</span><span style="background: white; color: blue">string </span><span style="background: white; color: black">Identity, </span><span style="background: white; color: #2b91af">VMExample2 </span><span style="background: white; color: black">offlinevm) | |||
{ | |||
</span><span style="background: white; color: #2b91af">Example2 </span><span style="background: white; color: black">e2 = EcoSpace.ExternalIds.ObjectForId(Identity).AsObject </span><span style="background: white; color: blue">as </span><span style="background: white; color: #2b91af">Example2</span><span style="background: white; color: black">; | |||
</span><span style="background: white; color: blue">try | |||
</span><span style="background: white; color: black">{ | |||
</span><span style="background: white; color: #2b91af">VMExample2 </span><span style="background: white; color: black">onlinevm=</span><span style="background: white; color: #2b91af">VMExample2</span><span style="background: white; color: black">.Create(EcoSpace, e2); | |||
</span><span style="background: white; color: #2b91af">ViewModelHelper</span><span style="background: white; color: black">.ApplyValues(offlinevm, onlinevm, </span><span style="background: white; color: blue">null</span><span style="background: white; color: black">); | |||
Commit(); | |||
</span><span style="background: white; color: blue">return </span><span style="background: white; color: black">View(</span><span style="background: white; color: #a31515">"Details"</span><span style="background: white; color: black">, onlinevm); | |||
} | |||
</span><span style="background: white; color: blue">catch | |||
</span><span style="background: white; color: black">{ | |||
</span><span style="background: white; color: blue">return </span><span style="background: white; color: black">View(</span><span style="background: white; color: #a31515">"Details"</span><span style="background: white; color: black">, offlinevm); | |||
} | |||
} | |||
</span></pre> | |||
</html> |
Revision as of 15:05, 6 November 2018
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); } }