我有一个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。
控制器可以访问子模型中的值吗? 如果我能够显示子模型,我应该能够在帖子上访问子值。
答案 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();
}