Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC如何处理有效的空模型绑定_Asp.net Mvc - Fatal编程技术网

Asp.net mvc MVC如何处理有效的空模型绑定

Asp.net mvc MVC如何处理有效的空模型绑定,asp.net-mvc,Asp.net Mvc,是否有任何普遍接受的方法来处理以下场景,或者我是否设计得很糟糕 我有一些领域模型,例如: public class Person { public int ID {get;set;} public string Name{get;set;} public int? AddressID {get;set;} }

是否有任何普遍接受的方法来处理以下场景,或者我是否设计得很糟糕

我有一些领域模型,例如:

            public class Person
            {
                public int ID {get;set;}
                public string Name{get;set;}
                public int? AddressID {get;set;}
            }
            public class Address
            {
                public int ID{get;set;}
                public string Street {get;set;}
            }
            <input value name="Address.AddressID" type="hidden">
然后我有一个视图模型:

            public class Personnel
            {
                public Person Person{get;set;}
                public Address Address{get;set;}
            }
因此,我对人事模型有一个强类型视图,并说我在其中有这样的东西

            @Html.HiddenFor(m => m.Address.ID)
            @Html.EditorFor(m => m.Address.Street)
问题是,当我得到我的人员模型时,有时地址可以是空的,因为有时一个人没有地址。但是UI要求仍然显示输入文本框。当Address为null时,视图中的结果标记如下所示:

            public class Person
            {
                public int ID {get;set;}
                public string Name{get;set;}
                public int? AddressID {get;set;}
            }
            public class Address
            {
                public int ID{get;set;}
                public string Street {get;set;}
            }
            <input value name="Address.AddressID" type="hidden">
因此,当我发回控制器时,Address.ID的表单集合中的值有一个空字符串。 ModelState始终无效,因为绑定器无法将空字符串转换为int。 但我不希望它以任何方式绑定,因为实际上没有任何地址(假设用户没有输入任何信息)。如何让活页夹忽略地址字段?

试试看

        [HttpPost]
        public ActionResult EditPersonnel(Personnel model)
        {
            if(model.Address.Equals(null))
              model.Address = new Address();
            if (ModelState.IsValid)
            {
                model.Save() // or whatever
            }

            return View(model);

        }
试一试


实际上,如果视图需要model属性,则
Address
属性永远不应为
null
。如果
Person.AddressID
null
,则将
地址的“空”实例分配给
personal.Address
属性:

// assuming you have a data object named "person"
if(!person.AddressID.HasValue) // or use person.AddressID == null
{
     model.Address = new Address(); // assuming your view model is called "model"
}

实际上,如果视图需要model属性,则
Address
属性永远不应为
null
。如果
Person.AddressID
null
,则将
地址的“空”实例分配给
personal.Address
属性:

// assuming you have a data object named "person"
if(!person.AddressID.HasValue) // or use person.AddressID == null
{
     model.Address = new Address(); // assuming your view model is called "model"
}

是正确的,如果您假设地址存在,或者您在一个“新”窗体上,没有对象,那么您应该将其初始化为一个空白地址。这也使更新更容易。如果您认为地址存在,或者您在“新”窗体上没有对象,则应将其初始化为空地址。这也使得更新更容易。