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