我有一个场景。我想在表单中进行HTTP POST
操作,所以我就是这样做的。
public class Item
{
public Item()
{
Storages = new HashSet<Storage>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Storage> Storages { get; set; }
-- remove some lines for brevity --
}
public class Storage
{
public int Id { get; set; }
public string Name { get; set; }
--- remove some lines for brevity --
}
所以基本上,Item
有很多Storage
所以我创建了viewmodel。
public class CreateStockViewModel
{
public string Name { get; set; }
public int StorageId { get; set; }
-- remove some lines for brevity --
}
在我的Controller
中。我有这个
[HttpGet]
public ActionResult Create()
{
ViewBag.Storages = _storageService.All
.OrderBy(i => i.Name)
.ToSelectList(s => s.Name, s => s.Id);
return View();
}
在我的观点中:
@model Wsfis.Web.ViewModels.ItemViewModels.CreateStockViewModel
@Html.DropDownList("Storages")
现在我的问题是,当我提交表格时。并且传递模型Quick Watch
。它是Null
或0
public ActionResult Create(CreateStockViewModel item)
{
// some code
}
简而言之,
@Html.DropDownList
之外,所有字段都被绑定。我在哪里错过了?另外一些注意事项:
Views
应该是强类型的。那么我应该在View
传递什么呢? (示例代码很棒。谢谢)对于ToSelectList
方法,我复制了这个code(我希望没关系)
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
您的表单输入与您的属性具有不同的名称,因此默认的模型绑定器不知道如何绑定您的模型。
您可以使用不同的名称来使用DropDownList帮助程序,但我更喜欢使用强类型帮助程序:
@Html.DropDownListFor(m => m.StorageId, ViewBag.Storages as IEnumerable<SelectListItem>)
答案 1 :(得分:0)
试试这样:
ViewBag.StorageId = _storageService.All
.OrderBy(i => i.Name)
.ToSelectList(s => s.Name, s => s.Id);
在视图中:
@Html.DropDownList("StorageId")
现在它将在CreateStockViewModel
对象的StorageId
属性中发布下拉列表选定值。