Asp.net mvc 4 ASP.NETMVC:FormPOST时,一个视图模型属性变为null

Asp.net mvc 4 ASP.NETMVC:FormPOST时,一个视图模型属性变为null,asp.net-mvc-4,Asp.net Mvc 4,我有一个简单的表单,其中有一个下拉列表和一个提交按钮。我有两个索引函数,一个用于get,一个用于formpost。当我从下拉列表中选择一个产品并单击submit按钮时,我的索引操作得到调用,但在那里我注意到我的products属性得到null。请看我的密码,告诉我哪里出错了 视图代码 模型代码 控制器代码 当我调试第二个操作时,我看到vm products属性变为null 请告诉我我在哪里犯的错误 谢谢@Mou 请修改您的razor视图并尝试此操作。 在Razor视图中,您没有指定Http ve

我有一个简单的表单,其中有一个下拉列表和一个提交按钮。我有两个索引函数,一个用于get,一个用于formpost。当我从下拉列表中选择一个产品并单击submit按钮时,我的索引操作得到调用,但在那里我注意到我的products属性得到null。请看我的密码,告诉我哪里出错了

视图代码 模型代码 控制器代码 当我调试第二个操作时,我看到vm products属性变为null 请告诉我我在哪里犯的错误

谢谢

@Mou

请修改您的razor视图并尝试此操作。 在Razor视图中,您没有指定Http verbGet、Post

@using (Html.BeginForm("Index", "TestVal", FormMethod.Post)

您没有犯任何错误,您没有得到产品列表,因为您没有将它们包含在HTML输入表单中

如果要包括产品列表,可以在输入表单中添加以下内容

  @for (int i = 0; i < Model.Products.Count(); i++)
        {
            <div>
                @Html.HiddenFor(model => Model.Products[i].Name)
                @Html.HiddenFor(model => Model.Products[i].ID)
            </div>
        }

vm products属性仍然为null。
public class TestValController : Controller
{
    // GET: TestVal
    public ActionResult Index()
    {
        var SampleVM = new SampleViewModel();
        SampleVM.Products = new List<Product>
        {
            new Product{ ID=1, Name="IPhone" },
            new Product{ ID=2, Name="MacBook Pro" },
            new Product{ ID=3, Name="iPod" }           
        };
        return View(SampleVM);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel vm)
    {

        var SampleVM = new SampleViewModel();
        SampleVM.Products = new List<Product>
        {
            new Product{ ID=1, Name="IPhone" },
            new Product{ ID=2, Name="MacBook Pro" },
            new Product{ ID=3, Name="iPod" }           
        };

        if (ModelState.IsValid)
            return View(vm);
        else
            return View(SampleVM);
    }
}
@using (Html.BeginForm("Index", "TestVal", FormMethod.Post)
  @for (int i = 0; i < Model.Products.Count(); i++)
        {
            <div>
                @Html.HiddenFor(model => Model.Products[i].Name)
                @Html.HiddenFor(model => Model.Products[i].ID)
            </div>
        }