我有這樣的兩個對象 - 雜誌和作者(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