【问题标题】:Posting objects containing other models发布包含其他模型的对象
【发布时间】:2015-04-10 19:52:15
【问题描述】:

我一直在寻找一种方法来发布包含其他模型的模型的所有信息,我相信我可以将对象发送到我的视图,然后从我看过的 50 个示例中取出并可以渲染一切都很好。

这是我所说的名为 Equipment 的模型。

public int id { get; set; }
public String name { get; set; }
public ManufacturerItem manufacturerItem { get; set; }
public EquipmentType equipmentType { get; set; }
public SupportItem supportItem{ get; set; }
public Placement placement{ get; set; }
public Boolean status { get; set; }
public DateTime endOfLife{ get; set; }
public String notes{ get; set; }
public Purchase purchase{ get; set; }
public Boolean mes{ get; set; }
public DateTime reviewedDate{ get; set; }

根据我读过的大量示例,我知道我可以像这样呈现这些:

@Html.EditorFor(model => model.name)
@Html.EditorFor(model => model.manufacturerItem.model.name)

在其他研究中,我确实偶然发现了building forms for deep View Model graphs in ASP.NET MVC,我可能会考虑使用它,但在 MVC 中发布了 2 天。我正在使用 MVC 5。所以我不知道今天的相关性。

假设我有另一个名为 Book 的模型,带有 {id, Title, Author},您可以编辑书名和作者。现在在这个模型中,在编辑时,我的控制器可能是这样的:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include="ID,Title,Author)"] Book book)
{  ... -insert code- ...}

放弃这个想法,设备模型的控制器方法签名是什么?我是否将其他对象作为它们自己的类型包含在内?

我没有使用 EF 或 linq-to-sql,因为我必须使用存储过程。因此,我希望将所有这些信息整齐地打包并传递到存储库,该存储库将负责参数分配和存储过程的调用。

【问题讨论】:

    标签: c# controller asp.net-mvc-5 asp.net-routing


    【解决方案1】:

    放弃这个想法,我的控制器方法签名将是什么 是设备模型吗?

    您是否尝试过使用以下签名:

    [HttpPost]
    public ActionResult Edit(Equipment model)
    {
        ...
    }
    

    顺便说一下,如果您的视图不包含允许编辑Equipment 模型对象图的所有属性的表单,您可以考虑使用仅包含所包含属性的视图模型作为表单中的输入字段。然后在服务器上,您将使用 id 从后端获取相应的 Equipment 实例,仅更新从 HTML 表单发送的属性并将结果保存回来。

    例如:

    [HttpPost]
    public ActionResult Edit(EquipmentViewModel model)
    {
        Equipment equipement = backend.GetById(model.Id);
        // set the properties that are coming from the UI:
        equipment.name = model.Name;
        equipment.supportItem = model.SupportItem;
        ...
    
        // save the updated entity back
        backend.Update(equipment);
    }
    

    在此示例中,EquipmentViewModel 将仅包含您在视图中具有相应输入字段且用户应该编辑的属性,而不是整个域模型对象图。

    【讨论】:

    • 我希望就这么简单,但没有人提到过在模型中包含模型。现在我不需要担心拥有 ViewModel,因为它们的目的不是必需的。不过,我可以将它们视为未来的可能性。你所拥有的和你所拥有的完全一样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2018-03-20
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多