Controller在提交@ Html.BeginForm时返回null

时间:2014-04-08 23:22:13

标签: c# asp.net-mvc razor

我有以下表格:

@model proj.ViewModels.AddMenu
@using(Html.BeginForm())
{ 
@Html.AntiForgeryToken()
@Html.TextBoxFor(x=>x.Menu.MenuName)
@Html.TextBoxFor(x=>x.MenuItem.MenuItemName)

  <input type="submit" />
}

这个ViewModel

public class AddMenu
{

    public Menu Menu { get; set; }
    public MenuItem MenuItem { get; set; }
}

菜单可以有一个MenuItem。当我提交表单时,我希望看到我的Addmenu模型已完成MenuName并且Addmenu.MenuItem.MenuItemName已完成。

然后我将我的菜单项添加到菜单中(因为菜单中有一个MenuItems集合)。

但AddMenu的Menu和MenuItem都返回null?

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

所以我从来没有意识到,但模型只有在我单独传递时才会起作用:

public ActionResult Addmenu(Menu menu, MenuItem menuItem)
{
//Model is not null
}

答案 1 :(得分:0)

您遇到的问题是您正在尝试将文本框绑定到非字符串,日期,整数等类型.MVC并不完全知道如何处理Menu和MenuItem类。这些课程是什么?

您可能考虑的是创建一个具有两个字符串属性的视图模型,名为Menu和MenuItem。在这种情况下,您将在回发中填充数据,之后您可以执行您想要的操作(映射到其他对象等)。

This文章包含一个答案,如果您有兴趣阅读更多内容,这对我来说似乎非常完整。