Ok, also fand ich die Antwort in einer Antwort auf eine etwas andere Frage. Also ich bin Entsendung meinen kompletten Code hier, die auf Scott Guthries ASP.NET MVC 2 Validierungs Post erweitert: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
Mein Viewmodel:
public class Person
{
[Required(ErrorMessage="First Name Required")]
[StringLength(50,ErrorMessage="Must be under 50 characters")]
public string FirstName { get; set; }
[Required(ErrorMessage="Last Name Required")]
[StringLength(50, ErrorMessage = "Must be under 50 characters")]
public string LastName { get; set; }
[Required(ErrorMessage="Age Required")]
[Range(1,120,ErrorMessage="Age Must be between 0 and 120")]
public int Age { get; set; }
[Required(ErrorMessage="Email Required")]
public string Email { get; set; }
public IEnumerable<SelectListItem> FavoriteColor { get; set; }
[Range(0, 6, ErrorMessage = "Out of range")]
public int SelectedFavColor { get; set; }
}
My Color-Klasse:
public class Colors
{
public int ColorID { get; set; }
public string ColorName { get; set; }
}
Mein Liste Helfer Erweiterungen von Rob Connery gestohlen, die es von jemand anderem gestohlen hat:
Mein Controller-Code (ja es könnte Refactoring sein DRY):
public ActionResult Create()
{
Person newFriend = new Person();
IList<Colors> colorslist = new List<Colors>();
colorslist.Add(new Colors { ColorID = -1, ColorName = "Please Select Color" });
colorslist.Add(new Colors { ColorID = 1, ColorName = "Red" });
colorslist.Add(new Colors { ColorID = 2, ColorName = "Green" });
colorslist.Add(new Colors { ColorID = 3, ColorName = "Blue" });
newFriend.FavoriteColor = colorslist.ToSelectList("ColorID","ColorName","-1");
return View(newFriend);
}
[HttpPost]
public ActionResult Create(Person friendToCreate, FormCollection collection)
{
friendToCreate.SelectedFavColor = Convert.ToInt32(collection["SelectedFavColor"]);
if (ModelState.IsValid)
{
return Redirect("/");
}
IList<Colors> colorslist = new List<Colors>();
colorslist.Add(new Colors { ColorID = -1, ColorName = "Please Select Color" });
colorslist.Add(new Colors { ColorID = 1, ColorName = "Red" });
colorslist.Add(new Colors { ColorID = 2, ColorName = "Green" });
colorslist.Add(new Colors { ColorID = 3, ColorName = "Blue" });
friendToCreate.FavoriteColor = colorslist.ToSelectList("ColorID", "ColorName");
return View(friendToCreate);
}
Meine Seite Markup:
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.FirstName) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.FirstName) %>
<%= Html.ValidationMessageFor(model => model.FirstName) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.LastName) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.LastName) %>
<%= Html.ValidationMessageFor(model => model.LastName) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Age) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Age) %>
<%= Html.ValidationMessageFor(model => model.Age) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Email) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Email) %>
<%= Html.ValidationMessageFor(model => model.Email) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.FavoriteColor) %>
</div>
<div class="editor-field">
<%= Html.DropDownList("SelectedFavColor", Model.FavoriteColor, -1)%>
<%= Html.ValidationMessageFor(model => model.SelectedFavColor) %>
</div>
<p>
<input type="submit" value="Submit" />
</p>
</fieldset>
<% } %>
Gefunden eine Antwort von Sorten: http://stackoverflow.com/questions/1047899/probleme-mit-asp-mvc-html-dropdownlist-using-a-modelview-pattern leichte Optimierung und es funktioniert ... größte Nachteil ist, ich muss die Dropdown-Liste neu auffüllen, wenn der ModelState ungültig ist ... – Webjedi
Ich fragte ein Frage dazu http://stackoverflow.com/questions/2086999/null-values-from-listbox-are-not-evaluated-in-the-model-binding-of-asp-net-mvc – Jorge