0

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var myViewModel = new CreateFavoriteListViewModel();
        var favoriteTypeDropdownList = new List<SelectListItem>();
        favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text1", Value = "1" });
        favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text2", Value = "2" });

        myViewModel.FavoriteTypeDropdownList = favoriteTypeDropdownList;
        return View(myViewModel);
    }

    [HttpPost]
    public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel)
    {
        return new EmptyResult();
    }
}

楷模:

public class CreateFavoriteListViewModel
{
    public CreateFavoriteListInputModel CreateFavoriteListInputModel { get; set; }
    public List<SelectListItem> FavoriteTypeDropdownList { get; set; }
}

public class CreateFavoriteListInputModel
{
    [Required]
    public string ListName { get; set; }
    public int SelectedFavoriteType { get; set; }
}

看法:

@model MvcApplication3.Controllers.CreateFavoriteListViewModel
<h2>title</h2>

@using (Html.BeginForm("Post", "Home", FormMethod.Post))
{
    @Html.LabelFor(x => x.CreateFavoriteListInputModel.ListName)
    @Html.TextBoxFor(x => x.CreateFavoriteListInputModel.ListName)

    @Html.LabelFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType)
    @Html.DropDownListFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType, Model.FavoriteTypeDropdownList)
    <input type="submit" value="Save" id="btnCreateList" name="btnCreateList" />
}

如您所见,我使用带有特殊 lambda 表达式的输入模型。( x=>x.CreateFavoriteListInputModel.ListName)。奇怪的问题是,这确实适用于我的家用计算机,但不适用于我的公司一台(createFavoriteListInputModel = Null)。似乎有不同版本的 ASP.NET MVC4 或类似的东西。

也许你们中的某些人知道,ASP.NET MVC 何时支持这种模型绑定。

我的代码对你有用吗?

如果我将视图模型和 Lamba 表达式更改为 iex=>x.ListName一切都在两台计算机上运行。

4

2 回答 2

0

我认为问题在于您传递给页面的模型与传递给控制器​​的模型之间的差异。

@model MvcApplication3.Controllers.CreateFavoriteListViewModel  <-- was passed to the page

CreateFavoriteListInputModel被传递给控制器​​ Post 动作

于 2012-11-01T00:04:23.060 回答
0

我发现了问题。问题在这里:

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel)
{
    return new EmptyResult(); // DOES WORK
}

在我公司的机器上,我有这样的东西:

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel inputModel)
{
    return new EmptyResult(); // DOES NOT WORK
}

参数名称必须与复杂对象的名称相同CreateFavoriteListInputModel(不区分大小写)。

帖子参数:

  • CreateFavoriteListInputModel.ListName=TestList
  • CreateFavoriteListInputModel.SelectedFavoriteType=1
  • btnCreateList=保存

我不明白为什么参数名称很重要?对于原始类型,这很清楚,但对于复杂类型,我不明白。

于 2012-11-01T11:55:22.563 回答