默认 ModelBinder 无法正常工作
-
12-11-2019 - |
题
我有以下结构:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
和 ActionResult
接收一个 Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
在我看来我有:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
正在发帖
Name=xxx
Dum.Name=yyy
但是当我尝试得到 dum.Dum.Name
在 ActionResult
我明白了 null
代替 yyy
. 。这是一个错误还是就是这样?是不是我用的不对?我需要为此实现一个新的活页夹吗?
解决方案
HI~你的视图应该使用 @Html.EditorFor(o => o.Dum.Name)
不是 @Html.EditorFor(o => o.Dum)
和回发控制器:
[HttpPost]
public ActionResult Index(Dummy postback)
{
var dsad = postback;
var a = postback.Name; //get Name of Dummy
var b = postback.Dum.Name; //get Name of InnerDummy of Dummy
return RedirectToAction("index");
}
如果您有任何问题,请告诉我:)
其他提示
你需要拉 InnerDummy
从里面出来 Dummy
班级。
当默认模型绑定器找到 Dum
property 它将尝试创建一个类型的对象 InnerDummy
, ,但在其上下文中并不存在。供参考 InnerDummy
正如你所拥有的,模型绑定器需要创建一个 Dummy.InnerDummy
, ,但它无法知道这一点。
制作 InnerDummy
命名空间的直接成员将解决该问题。
也可以通过声明来解决问题 Dum
作为:
public Dummy.InnerDummy Dum { get; set; }
不过我对此并不确定。
不隶属于 StackOverflow