用于空输入字符串的ASP.Net MVC模型绑定创建空模型对象

时间:2014-08-28 15:30:06

标签: asp.net-mvc asp.net-mvc-5 model-binding

我一直试图以最清洁的方式解决这个问题。

如何在为复杂类型提交空字符串时让模型绑定器不创建空对象?

说我有这个型号:

public class CreateCaseModel
{
    [Required]
    public UserModel Contact { get; set; }

    public UserModel Assigned {get; set; }
}

和用户模型:

public class UserModel {
    [Required]
    public string Id {get;set;}

    public string Name {get;set;
}

在视图中我有这些输入:

<input type="hidden" name="Assigned.Id" value="" />
<input type="hidden" name="Contact.Id" value="userId1" />

我把它发布到控制器上,如:

public ActionResult Create(CreateCaseModel model){
    if (!ModelState.IsValid)
    {
        //handle error       
    }else {
        //create
    }
}

在控制器中,我的model.Contactmodel.Assigned永远不会为空。 但是只有model.Contact会包含任何内容(Id将被设置) 此时,由于UserModel.Id字段被标记为必需,因此模型状态也将无效。

我想要发生的是,如果输入为空,则绑定器根本不创建UserModel对象。

我需要这个的全部原因是我在视图的其他地方使用UserModel.Name字段,我想将这两个字段组合在一起。我想使用ModelState.IsValid检查服务器端验证。

我当然可以提取每个userobjects的Id和Name字段并将它们直接放在CreateCaseModel中,但我想探索我所描述的内容是否可行。

感谢任何提示或指示!

1 个答案:

答案 0 :(得分:2)

  

如何在为复杂类型提交空字符串时让模型绑定器不创建空对象?

编写自己的custom ModelBinder。默认的模型绑定器将始终尝试为递归模型绑定创建复杂类型。