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)