在模型中保存模型

所以,我有这个由ID NameDataType定义的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) 

Name

Data Type

@Html.TextBoxFor(model => model.Name, new { @class = "textEntry" }) @Html.ValidationMessageFor(model => model.Name)

@Html.DropDownList("DTypeID", (SelectList)ViewBag.DTypeID, new { @class = "dropdown", @onchange = "DropDownChange()"}) @Html.ValidationMessageFor(model => model.DTypeID)

@*here goes list*@

@*here goes textbox*@ @Html.TextBox("textboxList")

@*here goes button*@

@**@ |

}

因此,为了捕获单击的按钮,我为我的控制器执行了此操作。

 [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(); }