2017-08-08 87 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;}来实现此目的。