在模型中保存模型
所以,我有这个由ID
Name
和DataType
定义的Property
类。 DataType
已填充静态值,并用作下拉列表。
现在,当用户从列表中选择某个值时, List
值准确无误,应用程序会打开其他文本框和按钮,以填充该列表。
模特就是这样的。
物业模型
public class Property { public int ID {get; set;} public string Name {get; set;} public int DTypeID {get; set;} public virtual DType DTypes {get; set;} }
列表模型
public class DList { public int ID {get; set;} public int PropertyID {get; set;} public string ListValue {get; set;} }
这就是我到目前为止所做的。
@using (Html.BeginForm()) { @Html.ValidationSummary(true) }
因此,为了捕获单击的按钮,我为我的控制器执行了此操作。
[HttpPost] public ActionResult Create(string button, string textboxList, Property property) { if (button == "add") { var lastProperty = db.Properties.OrderByDescending(p => p.PropertyID).FirstOrDefault(); int propID; if (lastProperty == null) { propID = 1; } else { propID = 1 + lastProperty.PropertyID; } DList dList = new DList(); dList.PropertyID = propID; dList.ListValue = textboxList; db.DLists.Add(dList); return View(property); } string projectID = System.Web.HttpContext.Current.Session["_SelectedProjectID"].ToString(); int projID = Convert.ToInt32(projectID); property.ProjectID = projID; property.DateCreated = DateTime.Now; property.DateEdited = DateTime.Now; if (ModelState.IsValid) { db.Properties.Add(property); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.DTypeID = new SelectList(db.DType, "ID", "Name", property.DTypeID); return View(property); }
问题是,当我单击“ Add
按钮时,它仍然会发送对ModelState.IsValid
的检查,而不应该检查。 我做错了什么,或者我做了什么吧:(
注意:其他一切基本上都有效。
编辑
所以我改变了控制器以接受来自不同点击按钮的参数。 但仍然缺少一些东西……
[ActionName("Create")] [AcceptVerbs(HttpVerbs.Post)] [AcceptParameter(Name = "button", Value = "add")] public ActionResult Create_Add(string textboxList) { var lastProperty = db.Properties.OrderByDescending(p => p.PropertyID).FirstOrDefault(); int propID; if (lastProperty == null) { propID = 1; } else { propID = 1 + lastProperty.PropertyID; } DList dList = new DList(); dList.PropertyID = propID; dList.ListValue = textboxList; db.DLists.Add(dList); db.SaveChanges(); return View(); } [AcceptVerbs(HttpVerbs.Post)] [AcceptParameter(Name="button", Value="create")] public ActionResult Create(Property property) { string projectID = System.Web.HttpContext.Current.Session["_SelectedProjectID"].ToString(); int projID = Convert.ToInt32(projectID); property.ProjectID = projID; property.DateCreated = DateTime.Now; property.DateEdited = DateTime.Now; if (ModelState.IsValid) { db.Properties.Add(property); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.DTypeID = new SelectList(db.DType, "ID", "Name", property.DTypeID); return View(property); } public class AcceptParameterAttribute : ActionMethodSelectorAttribute { public string Name { get; set; } public string Value { get; set; } public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) { var req = controllerContext.RequestContext.HttpContext.Request; return req.Form[this.Name] == this.Value; } }
你有db.DLists.Add(dList);
但不要将其保存在数据库中,只需返回视图即可。 你可以把db.Configuration.ValidateOnSaveEnabled = false;
在db.DLists.Add(dList);
之上db.DLists.Add(dList);
并看看它是否有效,但我认为它应该是这样的:
db.Configuration.ValidateOnSaveEnabled = false; db.DLists.Add(dList); db.SaveChanges(); return View(property);
您可能希望在返回之前重新打开Validate On Save。
更新也许你可以试试这个:
@{ var textBoxData = form.find('input[name="textboxList"]').val(); }