在包含动态条目的模型上使用自定义模型绑定器(列表)

时间:2016-07-10 07:06:24

标签: c# asp.net asp.net-mvc

这是我的主要课程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[]的行数,以便我可以循环播放它?

0 个答案:

没有答案