Asp.net mvc Asp.Net MVC3-在[HttpPost]方法上未将复杂类作为null传递

Asp.net mvc Asp.Net MVC3-在[HttpPost]方法上未将复杂类作为null传递,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,是我。。。又一次 我上了这些课 public class PrankTargetArgumentViewModel { public PrankTarget Target { get; set; } public PrankDefinition Prank { get; set; } public List<PrankArgument> Arguments { get; set; } } public class PrankArgument { p

是我。。。又一次

我上了这些课

 public class PrankTargetArgumentViewModel
{
    public PrankTarget Target { get; set; }
    public PrankDefinition Prank { get; set; }
    public List<PrankArgument> Arguments { get; set; }
}

public class PrankArgument
{
    public string Name { get; set; }
    public string Value { get; set; }
}
我的HTML是这样的

    public ActionResult PrankArguments()
    {
        PrankInstance currentInstance = SessionContext.CurrentPrankInstance;

        if (currentInstance == null)
            throw new ArgumentNullException("currentInstance");

        PrankTargetArgumentViewModel model = new PrankTargetArgumentViewModel();
        model.Prank = currentInstance.Prank;
        model.Target = currentInstance.Target;

        string[] args = model.Prank.Arguments.Split('|');

        model.Arguments = new List<PrankArgument>();
        foreach (string s in args)
        {
            model.Arguments.Add(new PrankArgument { Name = s, Value = s });
        }

        return View(model);
    }
@using (Html.BeginForm())
{
@Html.EditorFor(x => Model)  

<p>
    <input type="submit" value="Create" />
</p>
}
@使用(Html.BeginForm())
{
@EditorFor(x=>Model)

}
所以我的问题是,在PrankArguments(PrankTargetArgumentViewModel模型)返回操作后,模型参数总是空的。。我已经用加载的值填充了对象,所以我猜它们会出现在我添加的新参数后面的帖子中

流程是这样的

恶作剧 如果恶作剧需要参数,则加载ActionResult恶作剧参数() 向已发布的对象添加额外参数。 保存,调用ActionResult恶作剧参数(PrankTargetArgumentViewModel模型) --这就是问题所在,模型参数被作为null传回

我曾经有过好几次这样的问题,总是放弃,但这次我不会让这种情况发生

任何帮助都会很好!干杯,Ste

如果你还需要我的代码,请告诉我


编辑-删除视图包调试属性

我想如果我理解正确,如果您的视图被强类型化为
PrankTargetArgumentViewModel
,那么检索值所需做的就是:

[HttpPost]
public ActionResult PrankArguments()
{ 
    var pta = new PrankTargetArgumentViewModel();
    TryUpdateModel(pta);
}

在回顾了我自己的代码之后,我注意到我不需要整个PrankTargetArgumentViewModel,一个简单的参数列表就可以了

我改变了我的恶作剧观点,采用IEnumerable和used

@using (Html.BeginForm())
{
@Html.EditorForModel()

<p>
    <input type="submit" value="Finish" />
</p>
}
@使用(Html.BeginForm())
{
@Html.EditorForModel()

}
然后我的post-back方法签名如下

 [HttpPost]
 public ActionResult PrankArguments(IEnumerable<PrankArgument> arguments)
[HttpPost]
public ActionResult恶作剧参数(IEnumerable参数)
这正是我想要的


谢谢大家的建议。

你们的问题有点不清楚。。。你的意思是:“为什么每篇文章上都有ViewBag.Model为空?”还有,为什么你要在ViewBag上设置属性?对不起,伙计们,这纯粹是为了调试,我忘了删除。。希望问题更清楚一些。如果您调试您发回的操作,那么您的Request.Form对象包含什么?值是否已发布,但未解析到模型中?我已经查看了请求。表单内容及其回发请求。表单={argument.Value=Address&argument.Value=UnMute}这是我正在寻找的值-这并不理想,但我可以使用它们@stephen视图是否强类型为PrankTargetArgumentViewModel?i、 e在顶部视图中,您有:
@Model PrankTargetArgumentViewModel
,在您的视图中,您可以尝试
@Html.EditorForModel()
而不是
@Html.EditorFor(x=>Model)
 [HttpPost]
 public ActionResult PrankArguments(IEnumerable<PrankArgument> arguments)