这是我的主要课程model
:
public class Entries
{
public int id { get; set; }
[Required]
[Display(Name="First Name")]
public string firstname { get; set; }
[Required]
[Display(Name="Last Name")]
public string lastname { get; set; }
[Required]
[Display(Name="Address")]
public string address { get; set; }
[NotMapped]
public List<Items> items { get; set; }
}
它包含不同数量的
public class Items
{
public ObjectId id { get; set; }
public int ownerID { get; set; }
public string name { get; set; }
public string desc { get; set; }
[BsonIgnore]
public string deleted { get; set; }
}
因此,根据用户输入,索引大小可以是0~100。
id
将成为行的主要标识符,而ownerID
用于外键用途。
表格将发布到:
[HttpPost]
public ActionResult Edit(Entries entry)
{
这很简单。
我的问题是,我需要通过使用hiddenfor帮助程序来呈现ObjectID
,因为我需要显示列表并用于POST目的。 POST提交后,它不会绑定到ObjectID
属性,因为它已转换为string
。我需要使用ObjectID.Parse(string)
将其转换回来。
我能想到的一个解决方案是使用临时属性将ObjectID
保存为字符串,稍后再转换它。
我想通过使用ModelBinder
来解决这个问题,这是我到目前为止所做的:
public class ObjBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
HttpRequestBase request = controllerContext.HttpContext.Request;
string id = request.Form.Get("id");
string firstname = request.Form.Get("firstname");
string lastname = request.Form.Get("lastname");
string address = request.Form.Get("address");
List<Items> temp = new List<Items>();
//how do i add them to the list?
// request.Form.Get("items[0].id") but I need to know the row count
return new Entries
{
id = id,
name = name,
lastname = lastname,
address = address,
items = temp
};
}
是否可以知道items[]
的行数,以便我可以循环播放它?