【问题标题】:Populate object inside another class在另一个类中填充对象
【发布时间】:2017-08-08 10:42:01
【问题描述】:

我有一个搜索对象:

public class Search
    {

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

    [Display(Name = "Surname:")]
    [DataType(DataType.Text)]
    public string sname { get; set; }

    [Display(Name = "Date to (dob):")]
    [DataType(DataType.Date)]
    public DateTime? dateT { get; set; }

    [Display(Name = "Date from (dob):")]
    [DataType(DataType.Date)]
    public DateTime? dateF { get; set; }

    public Search()
    {
        /*
        first_name = string.Empty;
        surname = string.Empty;
        dateT = null;
        dateF = null;
        */            
    }
}

我已经在下面的类中实例化了它:

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

【问题讨论】:

标签: c# asp.net-mvc-5


【解决方案1】:

您在 Model 中创建了 Fields 而不是 MainModel 类中的 Properties,您需要通过提供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();           
    }

}

这将使模型绑定器能够正确地将值绑定回表单发布,模型绑定实际上无法在字段上工作。

【讨论】:

  • 这已经解决了这个问题 - 只要我能接受,我就会这样做。谢谢! (另外——不知道为什么我没有意识到这个简单的问题!)
【解决方案2】:

字符串的默认值为空。如果您希望它们在您的主模型的构造函数中为空字符串,则需要明确说明,如下所示:

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

或者通过在搜索对象本身的构造函数中执行此操作。

或者,您可以像这样在 Search 类中使用字段初始值设定项:

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

对于返回绑定,您在 Main 模型上的字段必须是属性。您可以通过在每个字段的末尾添加 {get; set;} 来实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 2019-05-18
    • 1970-01-01
    • 2022-11-26
    • 2018-03-22
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多