我正在创建一个锁定清单,每个锁具有一个序列号(标题),一个关联的学校(SchoolCode)和5个相关的组合(具有Number,Combination和IsActive)。我们正在使用Ncommon和linq并将它们设置为嵌套实体(Lock Has Many Combinations)。
在表单上,我正在使用JQuery模板动态构建表单。其中SchoolCode和Title是基本表单元素,Combinations [index] .Number和Combinations [index] .Combination是子元素。
<form method="post" action="/Lockers.aspx/Locks/Add">
<input type="hidden" name="SchoolCode" value="102">
Lock S/N: <input type="text" name="Title" value=""><br>
<div id="combinations">
<input type="hidden" name="Combinations[0].Number" value="1">
<input type="text" name="Combinations[0].Combination" value="">
<input type="radio" value="1" name="ActiveCombination"><br>
<input type="hidden" name="Combinations[1].Number" value="2">
<input type="text" name="Combinations[1].Combination" value="">
<input type="radio" value="2" name="ActiveCombination"><br>
<input type="hidden" name="Combinations[2].Number" value="3">
<input type="text" name="Combinations[2].Combination" value="">
<input type="radio" value="3" name="ActiveCombination"><br>
<input type="hidden" name="Combinations[3].Number" value="4">
<input type="text" name="Combinations[3].Combination" value="">
<input type="radio" value="4" name="ActiveCombination"><br>
<input type="hidden" name="Combinations[4].Number" value="5">
<input type="text" name="Combinations[4].Combination" value="">
<input type="radio" value="5" name="ActiveCombination"><br></div>
<input type="submit" id="add" value="Add »"> <br>
</form>
当我在没有Bind属性的情况下运行它时,模型绑定工作正常。一旦我添加了绑定,我似乎无法将其绑定到任何组合。
[HttpPost]
public ActionResult Add([Bind(Include = "SchoolCode,Title,Combinations.Combination,Combination.Number,Combinations[2].Combination")] LockerLock @lock, [Range(1, 5)] int ActiveCombination)
{
...
}
答案 0 :(得分:6)
从我可以告诉我需要告诉它绑定到一个名为Combinations的锁的属性,从那里我不能进一步选择包含或排除要绑定在子对象上的属性。相反,我需要在Domain模型对象本身上指定bind属性。
[HttpPost]
public ActionResult Add([Bind(Include = "SchoolCode,Title,Combinations")] LockerLock @lock, [Range(1, 5)] int ActiveCombination)
{
...
}
然后,Bind属性包含在组合对象...
中[Bind(Include = "Number,Combination")]
private class LockerLockCombination
{
[Required]
string Number { get; set; }
[Required]
string SchoolCode { get; set; }
}
为了保持一致性,我可能只是在原始锁模型上包含绑定...
对比一下,这是我的最终解决方案。我在这两种情况下都将BindAttribute添加到域模型中:
namespace Project.Web.Models
{
[MetadataType(typeof(LockerLock.Validation))]
public partial class LockerLock
{
[Bind(Include = "SchoolCode, Title, Combinations")]
private class Validation
{
[Required]
string Title {get; set;}
[Required]
string SchoolCode {get; set;}
}
}
}
namespace Project.Web.Models
{
[MetadataType(typeof(LockerLockCombination.Validation))]
public partial class LockerLockCombination
{
[Bind(Include = "Number, Combination")]
private class Validation
{
[Required]
string Number { get; set; }
[Required]
string Combination { get; set; }
}
}
}