C# 模型绑定不适用于表达式x=>;x、 InputModel.PropertyName

C# 模型绑定不适用于表达式x=>;x、 InputModel.PropertyName,c#,asp.net-mvc-4,model-binding,modelbinders,C#,Asp.net Mvc 4,Model Binding,Modelbinders,控制器: public class HomeController : Controller { public ActionResult Index() { var myViewModel = new CreateFavoriteListViewModel(); var favoriteTypeDropdownList = new List<SelectListItem>(); favoriteTypeDropdownLi

控制器:

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();
    }
}
公共类HomeController:控制器
{
公共行动结果索引()
{
var myViewModel=新建CreateFavoriteListViewModel();
var favoriteTypetDropDownList=新列表();
添加(新的SelectListItem{Text=“Text1”,Value=“1”});
添加(新的SelectListItem{Text=“Text2”,Value=“2”});
myViewModel.FavoriteTypeDropdownList=FavoriteTypeDropdownList;
返回视图(myViewModel);
}
[HttpPost]
公共操作结果发布(CreateFavoriteListInputModel CreateFavoriteListInputModel)
{
返回新的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" />
}
公共类CreateFavoriteListViewModel
{
公共CreateFavoriteListInputModel CreateFavoriteListInputModel{get;set;}
公共列表收藏夹类型下拉列表{get;set;}
}
公共类CreateFavoriteListInputModel
{
[必需]
公共字符串ListName{get;set;}
public int SelectedFavoriteType{get;set;}
}
查看:

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" />
}
@model mvcapapplication3.Controllers.CreateFavoriteListViewModel
标题
@使用(Html.BeginForm(“Post”、“Home”、FormMethod.Post))
{
@LabelFor(x=>x.CreateFavoriteListInputModel.ListName)
@Html.TextBoxFor(x=>x.CreateFavoriteListInputModel.ListName)
@LabelFor(x=>x.CreateFavoriteListInputModel.SelectedFavoriteType)
@Html.DropDownListFor(x=>x.CreateFavoriteListInputModel.SelectedFavoriteType,Model.FavoriteTypeDropdownList)
}
如您所见,我使用了一个带有特殊lambda表达式的输入模型。(
x=>x.CreateFavoriteListInputModel.ListName
)。 奇怪的问题是,这在我的家用电脑上有效,但在我的公司电脑上无效(
createFavoriteListInputModel=Null
)。 似乎有不同版本的ASP.NET MVC4或类似的东西

也许你们中的某个人从ASP.NET MVC支持这种模型绑定时就知道了

我的代码对你有用吗


如果我将视图模型和lamba表达式更改为,即
x=>x.ListName
这两台计算机上的一切都可以正常工作

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

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

@model mvcapapplication3.Controllers.CreateFavoriteListViewModel我发现了问题。问题在于:

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel)
{
    return new EmptyResult(); // DOES WORK
}
在我的公司机器上,我有这样的东西:

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel inputModel)
{
    return new EmptyResult(); // DOES NOT WORK
}
参数名称必须与复杂对象的名称相同
CreateFavoriteListInputModel
(不区分大小写)。

发布参数:

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" />
}
  • CreateFavoriteListInputModel.ListName=TestList
  • CreateFavoriteListInputModel。SelectedFavoriteType=1
  • btnCreateList=保存
我不明白的是为什么参数名很重要?
对于基本类型,这一点很清楚,但对于复杂类型,我不明白。

当然不同。为什么我要将空属性值(FavoriteTypeDropdownList)传递给我的post操作?也许我错了?我的意思是,它们不是同一个例子。我认为两者必须是同一类的实例
CreateFavoriteListViewModel
CreateFavoriteListInputModel
与您在使用
x=>x.ListName
时说的不一样吗?这是因为
x
是操作所期望的模型的实例-
x
CreateFavoriteListInputModel