当我尝试创建一个新的' Flow' class嵌套类(' Action')总是在控制器中返回null
所以我在类中有类如下:
public class Flow
{
private Action actionField
private string nameField
private bool enabledField
...
}
public class Action
{
private ActionSchedule actionScheduleField
private ActionParameter actionParameterField
private nameField
}
public class ActionSchedule
...
一个' Flow'
的单一创建视图@model ProjectZeus.Models.Flow
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.TextBoxFor(model => model.name, new { @placeholder = "Flow name" })
@Html.ValidationMessageFor(model => model.name)
@Html.LabelFor(model => model.enabled)
@Html.EditorFor(model => model.enabled)
@Html.ValidationMessageFor(model => model.enabled)
@Html.Partial("FlowAction")
...
然后是每个子类的部分视图
@model ProjectZeus.Models.FlowAction
@Html.TextBoxFor(model => model.name, new { @placeholder = "Action name" })
...
我尝试过创建类的实例并调用视图 - 错误,
我尝试在视图中创建类的实例 - 错误,
我尝试过不使用PartialViews:
@Html.TextBoxFor(model => model.action.name, new { @placeholder = "Action name" })
我用google搜索谷歌并googleedddd但没有运气,请帮忙!?
编辑:
实施客户模型绑定器似乎有点矫枉过正。这个页面描述了同样的问题,但解决方案代码不会为我编译''当前上下文中不存在名称'helper''? - http://danielhalldev.wordpress.com/2013/08/23/partial-views-and-nested-mvc-model-binding/
EDIT2:
为简洁起见,我更改了模型定义 - 模型实际上是从xsd自动生成的:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class D53ESBFlow
{
private D53ESBFlowAction actionField;
[Required]
private string nameField;
...
private bool enabledField;
/// <remarks/>
public D53ESBFlowAction action
{
get
{
return this.actionField;
}
set
{
this.actionField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
编辑3(凹凸):
看起来&#39; binder&#39;正在创建属性而不是类对象?
答案 0 :(得分:4)
你忘了{get;组;属性名称上的访问者?
答案 1 :(得分:1)
我在MVC 5,.NET 4.5,Visual Studio 2013中遇到了类似的问题。
这里有什么对我有用:添加一个构造函数,以便包含的类得到实例化,使它们像AntoineLev所说的属性(而不是变量),并将类添加到Binding中:
public class Flow
{
public Action actionField {get; set; }
public class Flow()
{
actionField = new Action(); // otherwise it shows up as null
}
}
在控制器中,在绑定中添加整个类:
public ActionResult Create([Bind(Include="action,name,enabled")] Flow flow)
{
...
}
您的里程可能会有所不同。
}
答案 2 :(得分:0)
我最终通过请求响应并按名称单独映射所有属性:
flow.action = new D53ESBFlowAction
{
name = Request["action.name"],
...
答案 3 :(得分:0)
我遇到了类似的麻烦,吉米博加德的这篇文章帮助了我。 Article here
查看生成的html将显示,在部分视图中,html不包含嵌套类的名称,因此默认情况下无法绑定它。如上面的一个答案中给出绑定声明解决了问题