控制器无法访问Child Model帖子

时间:2015-02-01 03:13:21

标签: asp.net-mvc-4

我有一个MVC模型,可以实例化2个子模型。

public class SModel
{
    public Pl sv = new Pl();
    public SLinks sm = new SLinks ();
}

当我在剃刀视图中显示数据时,一切都很好:

@Html.DisplayFor(model => model.sv.ListOfCategories.First().Description, new { @class = "body" })

但是当我回到控制器时,"全部"值为null或0。

剃刀中的文字框:

@Html.TextBoxFor(model => model.sm.YXZLink, new { @class = "post-input", @maxlength = "500" })

进入:

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult xxx(SModel model)

model.sm.YXZLink

不仅此值为null或0,而且所有其他值也为null或0。

控制器可以访问子模型中的值吗? 如果我能够显示子模型,我应该能够在帖子上访问子值。

2 个答案:

答案 0 :(得分:1)

SModel类仅包含字段。 DefaultModelBinder无法绑定到字段。而是通过添加getter和setter来将它们更改为属性

public class SModel
{
  public Pl sv { get; set; }
  public SLinks sm { get; set }
}

然后在无参数构造函数中初始化每个类型的新实例,或者在控制器GET方法中分配。

答案 1 :(得分:0)

使用以下代码格式,

型号:

public class masterModel
    {
        public childModelFirst childModelFirstEntity { get; set; }
        public childModelSecond childModelSecondEntity { get; set; }
    }    
    public class childModelFirst
    {
        public string Code { get; set; }
    }
    public class childModelSecond
    {
        public string Code { get; set; }
    }

查看:

@using (Ajax.BeginForm("About", "Home", new AjaxOptions { HttpMethod="POST",InsertionMode = InsertionMode.Replace,UpdateTargetId="target" }))
    {
        @Html.EditorFor(model=>model.childModelFirstEntity.Code)
        @Html.EditorFor(model => model.childModelSecondEntity.Code)

        <input type="submit" value="Add" />
    }

控制器:

public ActionResult About()
    {
        ViewBag.Message = "Your app description page.";

        var mastermdl = new masterModel();
        mastermdl.childModelFirstEntity = new childModelFirst();
        mastermdl.childModelSecondEntity = new childModelSecond();
        mastermdl.childModelFirstEntity.Code = "001";
        mastermdl.childModelSecondEntity.Code = "002";
        return View(mastermdl);
    }
    [HttpPost]
    public ActionResult About(masterModel model)
    {
        model.childModelFirstEntity.Code = model.childModelSecondEntity.Code;
        return View();
    }