2017-08-08 82 views
0

我有一個搜索對象內部的填充物另一個類

public class MainModel 
{ 

    public UserML userLM; 

    public Search search; 

    public MainModel() 
    { 
     userLM = new UserML(); 
     search = new Search();   
    } 

} 

的主力機型是我使用什麼我的視圖填充搜索對象,但我始終在提交時獲得空值(在我的控制器中放置斷點)

示例字段:

@Html.LabelFor(model => model.search.fname) 
@Html.EditorFor(model => model.search.fname, new { htmlAttributes = new { @class = "form-control" } }) 
@Html.ValidationMessageFor(model => model.search.fname, "", new { @class = "text-danger" }) 

模型傳遞給視圖:

WebApp1.MainModel 

這可能嗎?有任何想法嗎?

看,這也:

create-an-object-inside-another-class-c

+0

參考[這](https://stackoverflow.com/a/7789986/3462759) – tchelidze

回答

2

您已在示範創建代替屬性MainModel類,你需要提供getset來揭露他們的性質以便這些可以通過MVC的ModelBinder進行突變:

public class MainModel 
{ 
    public UserML userLM {get;set;} // note { get;set; } 

    public Search search {get;set;} 

    public MainModel() 
    { 
     userLM = new UserML(); 
     search = new Search();   
    } 

} 

這樣現在可以使模型活頁夾正確地綁定表單上的值,模型綁定在字段上實際上不起作用。

+0

這已經解決了這個問題 - 只要我能接受,我會這樣做。謝謝! (另外 - 不知道爲什麼我沒有意識到這個簡單的問題!) – rem

+0

太棒了!很高興它工作:) –

0

字符串的默認值爲空。如果你想讓他們在任的主力機型的構造空字符串,像這樣你就需要明確說明:

public MainModel() 
{ 
    userLM = new UserML(); 
    search = new Search{ 
     fname = "", 
     //other properties   
} 

或者通過在搜索對象本身的構造這樣做。

另外,您可以使用字段初始化在搜索類,像這樣:

[Display(Name = "First name:")] 
[DataType(DataType.Text)] 
public string fname { get; set; } = "" 

對於返回綁定,在主模型字段必須是性能。您可以通過在每個字段的末尾添加{get; set;}來實現此目的。