我有一个看起来像这样的模型:
商业 - 分支 - 电话(*) - 电话类型 - 数字 - 营业时间 (*) - 一周中的几天 - 工作时间(*) - 从时间 - 时间 - 自定义字段 (*) - 姓名 - 价值 - 地址 - 地址栏 - 城市 - 状态 - 压缩 ——雅达雅达
我为上面的每个类类型创建了Editor Template 。
我想要一个Business
带有提交表单的通用编辑器模板,该表单将整个结构发布到单个操作并保存它,既适用于现有实体,也适用于新实体。
- Editor Template是正确的方法吗?我如何沿着整个下线提交表格?
- 如何使添加和删除按钮在表单中添加/删除电话号码?
- 我如何订购集合中的项目(即我希望每个电话号码附近都有箭头,以便用户可以在客户端列表中向上或向下移动它,然后处理服务器上的保存,因为我已经有了解决方案)。
最重要的是,我的问题是如何将正确的值发布回服务器,以及如何修改客户端上的内部集合。一旦正确的数据以这种或另一种方式在服务器上,我就会知道如何处理它。我的问题是客户端和数据提交的正确方式。
更新
我看到了这个答案,它基本上回答了我问题的第一部分,但后两个仍然存在(添加-删除-订单按钮-在客户端管理集合)。
我的问题不是如何在客户端的 DOM 中添加/删除/重新排序行,而是如何修改客户端数据,然后在服务器中接收它,如下所示:
[HttpPost]
public ActionResult Save(Business business)
{
/// blah blah
}
更新
以下是我尝试插入新数据的方法:
看法:
@Ajax.ActionLink("Add", "AddCustomField", new AjaxOptions { UpdateTargetId = "customFields", InsertionMode = InsertionMode.InsertAfter })
行动:
public PartialViewResult AddOpeningTimes()
{
var ot = new OpeningTimes();
ot.WorkingPeriods.Add(new WorkingPeriod());
var e = EditorFor(ot);
//just here for debugging, the values are both empty strings
e.ViewData.TemplateInfo.HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
return e;
}
//this method is on the base controller:
protected PartialViewResult EditorFor<TModel>(TModel model)
{
return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
}
问题是name
适当的字段没有根据需要枚举(Branches[0].CustomField[0].Key
),相反,它只是Key
.