2017-09-18 60 views
-1

比方说,我有这些模型:ASP.NET MVC结合模型

public class FilterModel 
{ 
    FilterPersonModel Person { get; set; } 

    FilterJobModel Job { get; set; } 
} 

public class FilterPersonModel 
{ 
    public string Name { get; set; } 

    public int Age { get; set; } 
} 

public class FilterJobModel 
{ 
    public string CompanyName { get; set; } 

    public string JobTitle { get; set; } 
} 

而且我有以下作用:

public ActionResult Search(FilterModel model) 
{ 
     //TODO 
} 

最后我的行为被称为具有以下网址:http://mysite/myController/Search?Name=Bob&Age=32&CompanyName=Amazon&JobTitle=Developer

当我调试时,我的模型为空,Person和Job属性无法识别。 没有改变任何东西,我必须创建一个模型联编程序或有其他解决方案吗? 如果是,哪一个?

+0

提供的是用于构建它需要的URL – Praveen

+0

代码'... /搜索Person.Name =鲍勃&Person.Age = 32&的工作吗?公司名=亚马逊&...' –

+0

正如我在我的文章中所说的,没有什么必须改变(网址,模特,行动) –

回答

2

你所要求的是不可能的。 必须改变,无论是URL还是动作/模型。由于URL是公共接口,我建议创建一个视图模型来匹配该URL,然后您可以从那里映射到所需的模型。例如:

public class FilterViewModel 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string CompanyName { get; set; } 
    public string JobTitle { get; set; } 
} 

然后:

public ActionResult Search(FilterViewModel model) 
{ 
    var filter = new FilterModel 
    { 
     Person = new FilterPersonModel 
     { 
      Name = model.Name, 
      Age = model.Age 
     }, 
     Job = new FilterJobModel 
     { 
      CompanyName = model.CompanyName, 
      JobTitle = model.JobTitle 
     } 
    }; 

    // do whatever with `filter` 
} 
+0

这就是我会做的。另一种选择是自定义模型绑定,但这对于这样一个简单的解决方案来说是不必要的复杂。 – BgrWorker

+0

创建这个“混蛋”视图模型似乎是最容易的可能性。 谢谢 –