Auf die Implementierung einer view in MVC zu machen ein Wörterbuch in einem Modell und Karte das Wörterbuch zurück in das Modell
Lassen Sie uns sagen, Sie haben dieses Modell:
//model
public class Stuff
{
public string Name { get; set; }
public Dictionary<String, String> Description { get; set; }
}
Ich möchte in der Lage sein zu können, erstellen Sie eine Aktion und die entsprechende Ansicht aus, damit Benutzer hinzufügen können, die in der form den Namen von dem Zeug Objekt, und können mehrere Description-Einträge.
In diesem speziellen Fall, will ich die Taste, um eine Sprache sein, die code wie 'en', 'de', 'fr', 'es', etc. und der Beschreibung die entsprechende Beschreibung für die angegebene Sprache.
Beispielsweise in der Ansicht " sehen Sie vielleicht so etwas wie dieses:
@model Stuff
@using(Html.BeginForm())
{
<div>
@Html.LabelFor(x=>x.Name)
@Html.TextBoxFor(x=>x.Name)
</div>
<div>
<!-- What goes in here to map to the Dictionary in the Stuff Model? -->
<input name="LanguageCode" value="en" /> <input name="DescriptionValue" />
<input name="LanguageCode" value="de" /> <input name="DescriptionValue" />
<input name="LanguageCode" value="fr" /> <input name="DescriptionValue" />
</div>
<div>
<input type="submit" value="save" />
</div>
}
//controller
[HttpGet]
public ActionResult Index ()
{
return View(new Stuff());
}
[HttpPost]
public ActionResult Index (Stuff myStuff)
{
foreach(KeyValuePair kvp in myStuff.Description)
{
Trace.WriteLine(String.Format("Language: {0} - Description: {1}", kvp.Key, kvp.Value));
}
DBHelper.Save(myStuff);
return View();
}
Alternative Lösungen akzeptiert werden.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wird so etwas wie dieses:
Finden Sie in diesem Beitrag von Scott Hanselman
Können Sie erstellen, ein Editor-template (und das Display template) für den Dictionary-Typ. Dann, MVC erbringen werden können Wörterbuch-Instanzen in Ihren Modellen.
Beispielsweise in Ihrem Modell können Sie die Vorlage verwenden, wie Folgen Sie:
in Ihrer Ansicht, die Sie haben, genau dies zu tun:
- Und der editor-Vorlage (Sie müssen es schaffen, in " Views/Shared/EditorTemplates Ordner) könnte so etwas wie dieses: