我将数据发送到我的dropdownlistfor,我可以选择该数据,但当我点击按钮转到发布方法时,我收到错误:
"类型' System.InvalidOperationException'的例外情况发生在 System.Web.Mvc.dll但未在用户代码中处理
附加信息:具有密钥的ViewData项 '的SelectedItem'属于' System.String'但必须是类型 ' IEnumerable的'"
我认为dropdownlistfor中razor视图中的第一个值是选定值,第二个是要显示的值列表,但现在我不知道下拉列表是如何工作的; /
你可以帮助我吗?我的型号代码:
Public Class NewProcessIndex
Public Property Name As String
Public Property DataSource1 As String
Public Property SelectedItem As String
Public Property Items As IEnumerable(Of SelectListItem)
End Class
我的控制器代码:
<HttpGet>
Function AddNewProces() As ActionResult
Dim listBoxData = New NewProcessIndex With {
.Items = {
New SelectListItem() With {.Value = 1, .Text = "item 1"},
New SelectListItem() With {.Value = 2, .Text = "item 2"},
New SelectListItem() With {.Value = 3, .Text = "item 3"}
}
}
Return View(listBoxData)
End Function
<HttpPost>
Function AddNewProces(newProcesData As NewProcessIndex) As ActionResult
newProcesData.DataSource1 = newProcesData.SelectedItem
Return View(newProcesData)
End Function
最后我的观看代码:
@ModelType NewProcessIndex
<h2>AddNewProces</h2>
@Using (Html.BeginForm("AddNewProces", "Admin", FormMethod.Post))
@<div class="form-horizontal">
@Html.LabelFor(Function(m) m.Name)
@Html.TextBoxFor(Function(m) m.Name)
@Html.ValidationMessageFor(Function(m) m.Name)
@Html.DropDownListFor(Function(x) x.SelectedItem, Model.Items)
<input type="submit" value="AddNewProces" />
</div>
End Using
@If FormMethod.Post Then
@<p>@Model.Name</p>
@<p>@Model.DataSource2</p>
End If
编辑: 有趣的事情... dropdownlistfor不起作用,但listboxfor以这种形式工作:
@Html.ListBoxFor(Function(x) x.SelectedItem, Model.Items)
答案 0 :(得分:0)
可能我将模型返回视图的事实是一个问题,或者我玩得很开心
@If isPost Then
...
End If
我不确定导致错误的是什么,但现在我正在使用ListBoxFor,一切都像它应该......奇怪:)如果有人还想解释我为什么它没有按预期工作(好吧)因为我希望它能起作用)然后立即回答我:)