【问题标题】:ASP.net MVC - Update Model on complex modelsASP.net MVC - 在复杂模型上更新模型
【发布时间】:2010-05-25 14:28:49
【问题描述】:

我正在努力获取复杂模型表单的内容,然后使用该复杂模型更新模型。

我的帐户模型有很多人

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult OpenAnAccount(string area,[Bind(Exclude = "Id")]Account account, [Bind(Prefix="Account.Individuals")] EntitySet<Individual> individuals){

    var db = new DB();
    account.individuals = invdividuals;
    db.Accounts.InsertOnSubmit(account);
    db.SubmitChanges();
}

所以它适用于添加新记录,但不适用于更新它们:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult OpenAnAccount(string area,[Bind(Exclude = "Id")]Account account, [Bind(Prefix="Account.Individuals")] EntitySet<Individual> individuals){

    var db = new DB();
    var record = db.Accounts.Single(a => a.Reference == area); 
    account.individuals = invdividuals;

    try{
        UpdateModel(record, account); // I can't convert account ToValueProvider()
        db.SubmitChanges();
    }
    catch{
        return ... //Error Message
    }
}

我的问题是如何将 UpdateModel 与帐户模型一起使用,因为它不是 FormCollection。 我怎样才能转换它?如何将 ToValueProvider 与复杂模型一起使用?

希望我说的够清楚

非常感谢:)

更新

这就是我想要的: http://goneale.com/2009/07/27/updating-multiple-child-objects-and-or-collections-in-asp-net-mvc-views/

【问题讨论】:

    标签: c# asp.net-mvc models


    【解决方案1】:

    除非您的 Account 类型实现 IValueProvider,否则此方案不受支持。

    不过,这将是一些非常奇怪的 MVC。模型绑定器应该理解 HTTP 请求并将其转换为您的模型,而不是将您的实体绑定到您的其他实体。

    经过进一步检查,我认为您正在寻找: http://msdn.microsoft.com/en-us/library/dd487246.aspx

    试试这个:

     try{
        db.Accounts.ApplyCurrentValues(record); 
        db.SubmitChanges();
     }
    

    【讨论】:

    • 您可以创建对象并将其保存到数据库中,但您无法像创建对象那样更新它们,这对我来说似乎很奇怪。否则这将是非常有限的,例如在 Rails 中不会发生。
    • 您使用 updatemodel 不正确。这没有什么奇怪的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多