2017-09-18 21 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

創建這個「混蛋」視圖模型似乎是最容易的可能性。 謝謝 –