下拉列表我的MVC应用程序中有一个下拉列表的表单。现在,我正在尝试为混合添加验证,看起来下拉列表无法验证,无论它的价值是什么。ASP.NET MVC。验证失败,无论价值
没有验证它将允许控制器按计划工作和重定向。通过验证,似乎允许发生数据库更改,但ModelState.IsValid为false。
我被卡住了。这是一个已知的问题?
查看:
<label for="parent">Child of:</label>
<%= Html.DropDownList("parent", (SelectList)ViewData["pageList"])%>
<%= Html.ValidationMessage("parent") %>
控制器动作:
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
[ValidateAntiForgeryToken()]
public ActionResult Create(Page page)
{
try
{
pageRepository.Insert(page);
}
catch (RuleException ex)
{
ex.CopyToModelState(ModelState);
}
if (!ModelState.IsValid)
{
var pageSelectList = pageRepository.GetTop().ToList();
pageSelectList.Add(new Page
{
menuTitle = "None"
});
ViewData["pageList"] = new SelectList(pageSelectList.OrderBy(x => x.listOrder), "ID", "menuTitle");
return View();
}
return RedirectToAction("List");
}
返回的错误是:值 'X' 是无效的。 其中'x'是当前选择的数值。无论选择的值是什么,都会发生故障。
public class Page
{
private EntityRef<Page> _parent = default(EntityRef<Page>);
private EntitySet<Page> _children = new EntitySet<Page>();
public int ID { get; set; }
public string pageTitle { get; set; }
public string menuTitle { get; set; }
public string content { get; set; }
public int listOrder { get; set; }
public bool visible { get; set; }
public int parent { get; set; }
public DateTime? created { get; set; }
public DateTime? edited { get; set; }
public string createdBy { get; set; }
public string lastEditBy { get; set; }
public string linkInfo { get; set; }
public bool IsSelected { get; set; }
public Page Parent
{
// return the current entity
get { return this._parent.Entity; }
set { this._parent.Entity = value; }
}
public EntitySet<Page> Children
{
get { return this._children; }
set { this._children.Assign(value); }
}
public static Page Error404()
{
return (new Page
{
content = "<p>Page not found</p>",
pageTitle = "404. Page not found"
});
}
}
这是我尝试了一个解决办法:
public ActionResult Create([Bind(Exclude="parent")] Page page)
{
page.parent = Convert.ToInt32(Request.Form["parent"]);
...
我只是排除ModelBinding的下拉列表并重新加载它通过的Request.Form回。这是不错的做法吗?
我还应该提到,我清除模型状态: \t \t \t ModelState。明确(); 然后将错误和值添加回原处: \t \t \t ModelState.AddModelError(field,error); \t \t \t ModelState.SetModelValue(field,ValueProvider [field]); – mark123 2010-01-16 13:25:32