gpt4 book ai didi

asp.net-mvc - 使用数据注释验证ASP.NET MVC 2中的SelectList

转载 作者:行者123 更新时间:2023-12-04 18:16:46 26 4
gpt4 key购买 nike

我正在尝试在“选择列表”上使用内置的ASP.NET MVC 2客户端验证,如下所示:

 private SelectList _CategoryList;
[Required(ErrorMessage = "Category Required")]
[System.ComponentModel.DataAnnotations.Range(1, double.MaxValue, ErrorMessage = "Please Select A Category")]
[DisplayName("Category")]
public SelectList CategoryList
{
get
{
return new SelectList(Categories, "CatID", "CatFullName"); ;
}
set
{
_CategoryList = value;
}
}

但是它不起作用...如果选择默认值0,则不会显示验证消息,并且页面会像已验证一样进行。有什么想法吗?

最佳答案

好的,所以我在一个稍有不同的问题的答案中找到了答案。因此,我将在此处发布完整的代码,该代码在Scott Guthries ASP.NET MVC 2验证帖子上进行了扩展:http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

我的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; }
}

我的色彩课:
public class Colors
{
public int ColorID { get; set; }
public string ColorName { get; set; }
}

我的列表帮助扩展程序是从Rob Connery那里偷来的,Rob Connery从其他人那里偷了它:
public static class ListExtensions
{
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> collection, Action<T> action)
{
foreach (var item in collection) action(item);
return collection;
}

public static SelectList ToSelectList<T>(this IEnumerable<T> collection)
{
return new SelectList(collection, "Key", "Value");
}

public static SelectList ToSelectList<T>(this IEnumerable<T> collection, string selectedValue)
{
return new SelectList(collection, "Key", "Value", selectedValue);
}

public static SelectList ToSelectList<T>(this IEnumerable<T> collection,
string dataValueField, string dataTextField)
{
return new SelectList(collection, dataValueField, dataTextField);
}

public static SelectList ToSelectList<T>(this IEnumerable<T> collection,
string dataValueField, string dataTextField, string selectedValue)
{
return new SelectList(collection, dataValueField, dataTextField, selectedValue);
}
}

我的 Controller 代码(是的,可以重构为更干):
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);
}

我的页面标记:
<% 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>

<% } %>

关于asp.net-mvc - 使用数据注释验证ASP.NET MVC 2中的SelectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com