Asp.net mvc 5 为什么在asp.net mvc 5中显示和绑定引用字段如此困难?

Asp.net mvc 5 为什么在asp.net mvc 5中显示和绑定引用字段如此困难?,asp.net-mvc-5,Asp.net Mvc 5,在rails中,通常使用这样的代码来完成创建编辑表单所需的全部工作,该表单包含外键属性引用字段的下拉列表: <%= f.input :section, :as => :radio %> :收音机%> 我正在努力学习asp.NETMVC,虽然我喜欢很多东西,但我一直在想如何为与不同模型相关的字段创建下拉列表 1) 根据everyones的建议,我将使用ViewModel模式,并在其中添加一个属性,即 IEnumerable 2) 用值填充选择列表项。(为什么不默认为all??

在rails中,通常使用这样的代码来完成创建编辑表单所需的全部工作,该表单包含外键属性引用字段的下拉列表:

<%= f.input :section, :as => :radio %>
:收音机%>
我正在努力学习asp.NETMVC,虽然我喜欢很多东西,但我一直在想如何为与不同模型相关的字段创建下拉列表

1) 根据everyones的建议,我将使用ViewModel模式,并在其中添加一个属性,即

IEnumerable

2) 用值填充选择列表项。(为什么不默认为all??)

3) @Html.ListBoxFor(m=>m.SelectedCategories,Model.categoritychoices)

4) 现在,在控制器上的创建/编辑方法中,我必须读取这些值并保存它们

我觉得我一定错过了什么。除了第四步,所有的步骤都不会让我太烦恼。没有自动绑定吗?(如果有,我的代码不起作用,因为当我尝试时,值总是空的…)

编辑:我尝试的许多教程似乎都参考了设置“ForeignModelNameID”字段(如ProductID字段),但我的模型只有虚拟产品字段。不确定这是否影响了我自动绑定到它的能力


我也不太明白编辑方法参数中Bind=“Field1,Field2,Field3”的用途。我能把国外的关键字段传给那个吗?我需要输入密钥的名称还是只输入导航属性的名称?

您所说的“为什么不将其默认为全部”是什么意思。你的意思是你希望选择所有选项吗?如果是,则将
SelectedCategories
的值设置为与所有选项的值相匹配的值数组(这就是模型绑定的工作方式-它绑定到您的属性,因此如果
SelectedCategories=new int[]{1,3,6}
如果您的选项具有值属性1-10,那么将选择第1、第3和第6个选项。假设我有产品和类别模型。一个产品有一个类别。选择列表不应该默认为所有类别吗?另外,当我发布到编辑操作时,类别是否应该自动绑定?我无法将其绑定到sav自动添加…我尝试添加“类别”和“类别ID”对于方法签名中的绑定参数列表…两者似乎都不起作用。不明白您的意思,选择列表不应该默认为所有类别吗?A
发回一个简单值数组。如果
categoryId
是typeof
int
,则绑定到的属性需要是
public int[]所选类别{get;set;}
类别选择
需要是
IEnumerable