我正在尝试编写一个页面,以允许用户为属性创建模板 检查。基本上该页面有一个TemplateCompany模型,它有一个模板区域的集合, 它有一个模板区域集合。当我单击添加区域按钮时,它会生成一个部分 包含区域文本框和复选框的视图。在该局部视图中,有一个按钮用于生成另一个要显示的局部视图 区域项文本框 - 用于处理用户将许多区域项添加到TemplateCompany对象。
当前设计的问题是将数据提交到后端 - 我没有真正的方法将区域项和areaItems与模板相关联
以下是我的代码:
//Template class
public partial class TemplateCompany
{
public string Title { get; set; }
public string Description { get; set; }
public string ColourIndicatorHex { get; set; }
...
public virtual ICollection<TemplateCompanyArea> TemplateCompanyAreas { get; set; }
}
创建模板html:
@model ITest.TEST.DAL.TemplateCompany
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.Title)
@Html.EditorFor(m => m.Title, "")
<br /><br />
@Html.LabelFor(m => m.Description)
<br />
@Html.TextAreaFor(m => m.Description, new { cols = 40, rows = 5 })
<br /><br />
@Html.LabelFor(m => m.ColourIndicatorHex)
@Html.EditorFor(m => m.ColourIndicatorHex)
@Html.LabelFor(m => m.UserTemplateRef)
@Html.DisplayFor(m => m.UserTemplateRef)
<br /><br />
@Html.CheckBoxFor(m => m.IsMandatoryEnabledAsDefaultForAllItems)
@Html.LabelFor(m => m.IsMandatoryEnabledAsDefaultForAllItems)
<br /><br />
@Html.CheckBoxFor(m => m.IsRepairModeEnabled)
@Html.LabelFor(m => m.IsRepairModeEnabled)
<br /><br />
@Html.CheckBoxFor(m => m.IncludesFrontTitlePageInReport)
@Html.LabelFor(m => m.IncludesFrontTitlePageInReport)
<br /><br />
//Is there occupancy details in report?
@Html.CheckBoxFor(m => m.DisplayItemNameInActionsReport)
@Html.LabelFor(m => m.DisplayItemNameInActionsReport)
<br /><br />
@Html.CheckBoxFor(m => m.DisplayPhotoCountInReport)
@Html.LabelFor(m => m.DisplayPhotoCountInReport)
<br /><br />
@Html.LabelFor(m => m.ReportRepairsDisclaimerStatement)
<br />
@Html.TextAreaFor(m => m.ReportRepairsDisclaimerStatement, new { cols = 40, rows = 5})
<br />
@Html.LabelFor(m => m.ReportConfidentialityStatement)
<br />
@Html.TextAreaFor(m => m.ReportConfidentialityStatement, new { cols = 40, rows = 5 })
<br />
@Html.LabelFor(m => m.ReportDisclaimerStatement)
<br />
@Html.TextAreaFor(m => m.ReportDisclaimerStatement, new { cols = 40, rows = 5 })
<br />
<div id="addarea">
@Ajax.ActionLink("Click to add area", "_AddArea", "Template", null, new AjaxOptions
{
UpdateTargetId = "addarea",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET"
})
</div>
<input type="submit" value="Save Template" />
}
添加区域html:
@model ITest.ITest.DAL.TemplateCompanyArea
<h2>Area</h2>
@Html.LabelFor(m => m.AreaName)<br />
@Html.TextAreaFor(m => m.AreaName, htmlAttributes: new {placeholder = "Enter area name here" })
<br />
@Html.LabelFor(m => m.AreaGuideline)<br />
@Html.TextAreaFor(m => m.AreaGuideline, htmlAttributes: new { placeholder = "Enter area guideline here" })
<div id="addareaitem">
@Ajax.ActionLink("Click to add area item", "_AddAreaItem", "Template", null, new AjaxOptions
{
UpdateTargetId = "addareaitem",
InsertionMode = InsertionMode.InsertAfter,
HttpMethod = "GET"
},new { id = "addareaitemlink" })
</div>
添加区域项html:
@model ITest.ITest.DAL.TemplateCompanyAreaItem
<h2>Area Item</h2>
@Html.LabelFor(m => m.AreaItemName)
@Html.TextAreaFor(m => m.AreaItemName, htmlAttributes: new { placeholder = "Enter area item name here" })
@Html.LabelFor(m => m.AreaItemGuideline)
@Html.TextAreaFor(m => m.AreaItemGuideline, htmlAttributes: new { placeholder = "Enter area item guideline here" })
@Html.CheckBoxFor(m => m.HasRepairs)
@Html.LabelFor(m => m.HasRepairs)
@Html.CheckBoxFor(m => m.IsMandatory)
@Html.LabelFor(m => m.IsMandatory)
<br />
@Ajax.ActionLink("Click to add area item", "_AddAreaItem", "Template", null, new AjaxOptions
{
UpdateTargetId = "addareaitem",
InsertionMode = InsertionMode.InsertAfter,
HttpMethod = "GET"
})
除了TemplateArea和TemplateAreaItems的集合,然后在创建模板页面上使用EditorFor帮助程序之外,我还考虑过为公司使用ViewModel,它只包含模板公司信息。这个问题是它包含了集合类的所有信息 - 我不一定需要它们。我很高兴采用这样的方法,但我需要一个解决这个问题的方法,并在实现它时提供更多帮助
非常感谢任何有关开发此项目的良好方法的帮助。
提前致谢!