控制器:
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表达式更改为x=>x.ListName
,则一切都可以在两台计算机上运行。
答案 0 :(得分:0)
我认为问题在于您传递给页面的模型与传递给控制器的模型之间的区别。
@model MvcApplication3.Controllers.CreateFavoriteListViewModel <-- was passed to the page
但CreateFavoriteListInputModel
已传递给控制器发布操作
答案 1 :(得分: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
的名称相同(不区分大小写)。
发布参数:
我不明白为什么参数名称很重要? 对于原始类型,这很清楚,但对于复杂类型,我没有得到它。