下拉列表我的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