我有这样的两个对象 - 杂志和作者(MM关系):编辑的模式 - 复杂的类型不正确更新
public partial class MAGAZINE
{
public MAGAZINE()
{
this.AUTHORs = new HashSet<AUTHOR>();
}
public long REF_ID { get; set; }
public string NOTES { get; set; }
public string TITLE { get; set; }
public virtual REFERENCE REFERENCE { get; set; }
public virtual ICollection<AUTHOR> AUTHORs { get; set; }
}
public partial class AUTHOR
{
public AUTHOR()
{
this.MAGAZINEs = new HashSet<MAGAZINE>();
}
public long AUTHOR_ID { get; set; }
public string FULL_NAME { get; set; }
public virtual ICollection<MAGAZINE> MAGAZINEs { get; set; }
}
}
我的问题是,我似乎无法更新对一个作家的数量杂志例如如果我有一位作者叫“Smith,P.”我可以添加另一个名为“Jones,D.”的文档,但是在发回到编辑控制器后,作者的数量仍然显示为1 - 即“Smith,P.H”。
请不要说我已经成功地将作者数量绑定到父实体(杂志),它使用自定义模型绑定器来检索作者并绑定到杂志(我认为),但它仍然没有“ t似乎正确更新。
我的更新型号代码是直线前进 - 和之前和之后显示变量值:
public ActionResult Edit(long id)
{
MAGAZINE magazine = db.MAGAZINEs.Find(id);
return View(magazine);
}
这里是变量预编辑/更新 -
[HttpPost]
public ActionResult Edit(MAGAZINE magazine)
{
if (ModelState.IsValid)
{
db.Entry(magazine).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(magazine);
}
...这里是一个新的作者之后的变量已被添加...
我越来越怀疑作者实体显示,发布编辑,它没有绑定到任何杂志,我猜这就是为什么它没有被更新回杂志实体 - 但这是令人困惑的,因为我正在有效地处理同一杂志实体 - 我想这可能与作者的自定义模型联编程序有关。
任何人都可以帮忙吗?
为了完整性 - 我已经包括了我的AuthorModelBinder类太 -
public class AuthorModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var values = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (values != null)
{
// We have specified asterisk (*) as a token delimiter. So
// the ids will be separated by *. For example "2*3*5"
var ids = values.AttemptedValue.Split('*');
List<int> validIds = new List<int>();
foreach (string id in ids)
{
int successInt;
if (int.TryParse(id, out successInt))
{
validIds.Add(successInt);
}
else
{
//Make a new author
AUTHOR author = new AUTHOR();
author.FULL_NAME = id.Replace("\'", "").Trim();
using (RefmanEntities db = new RefmanEntities())
{
db.AUTHORs.Add(author);
db.SaveChanges();
validIds.Add((int)author.AUTHOR_ID);
}
}
}
//Now that we have the selected ids we could fetch the corresponding
//authors from our datasource
var authors = AuthorController.GetAllAuthors().Where(x => validIds.Contains((int)x.Key)).Select(x => new AUTHOR
{
AUTHOR_ID = x.Key,
FULL_NAME = x.Value
}).ToList();
return authors;
}
return Enumerable.Empty<AUTHOR>();
}
}
答复!Hoorah,这是Mark的安慰,因为自写这篇文章后,我意识到我需要一个MagazineModelBinder类,所以我做了一个。但是当你做一个新的职位时你做什么?你是否删除现有的Post,并重新从头开始重新创建?在我的情况下,我通过ID检索杂志,并清除了作者,然后应用我的新作家集(即使之前也存在),但是,它开始创建新的作者,并且我在Authors表中获得重复项:你在你的联编程序中做了什么? – Vidar
@Vidar我包含了PostBinderBinder的源代码,你可以看看那个 – VJAI
如果你还有问题,请告诉我 – VJAI