使用模型的下拉列表

时间:2012-08-13 15:51:57

标签: vb.net asp.net-mvc-3

我正在尝试使用以下下拉框来选择要为模型编辑的值范围。

到目前为止,我已经获得了以下代码:

@Html.DropDownList("Services", "")

但基本上我想在这里保存该字符串而不是:

@Html.EditorFor(Function(model) model.ServiceName)

我的观点是:

@Using Html.BeginForm()
    @Html.ValidationSummary(True)
    @<fieldset>
        <legend>RequestedService</legend>

        <div class="editor-label">
            @Html.LabelFor(Function(model) model.ServiceId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(Function(model) model.ServiceId)
            @Html.DropDownList("Services", "")
            @Html.ValidationMessageFor(Function(model) model.ServiceId)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
End Using

目前都有这两件事。

我的控制器:

Function AddService(id As Integer) As ViewResult
        Dim serv As RequestedService = New RequestedService
        serv.JobId = id

        Dim ServiceList = New List(Of String)()

        Dim ServiceQuery = From s In db.Services
                           Select s.ServiceName

        ServiceList.AddRange(ServiceQuery)

        ViewBag.Services = New SelectList(ServiceList)

        Return View(serv)
    End Function

最后我的模特:

Imports System.Data.Entity
Imports System.ComponentModel.DataAnnotations

Public Class RequestedService

Public Property RequestedServiceId() As Integer


Public Property ServiceId() As Integer

<Required()>
<Display(Name:="Job Number *")>
Public Property JobId() As Integer

<Required()>
<Display(Name:="Station ID *")>
Public Property StationId() As Integer

End Class

1 个答案:

答案 0 :(得分:1)

问题在于你需要告诉选择列表的SelectList,这是值和显示文本的内容。您不能只传递字符串列表,要正确填充,添加密钥和值,如此

Dim ServiceQuery = (From s In db.Services
                       Select s)

可能是这样的:如果您需要与服务相关的ID

ViewBag.Services = New SelectList(ServiceList, s.IDServices, s.ServiceName)

或者像这样在案例中你只需要值的文本

ViewBag.Services = New SelectList(ServiceList, s.ServiceName, s.ServiceName)

<强>更新

要完成此操作,您需要修改视图和您的操作。

首先在您的操作中更改Viewbag元素的名称,如下所示

ViewBag.ServiceId = New SelectList(ServiceList, s.IDServices, s.ServiceName)

现在你的观点中的明显变化是

@Using Html.BeginForm()
@Html.ValidationSummary(True)
@<fieldset>
    <legend>RequestedService</legend>

    <div class="editor-label">
        @Html.LabelFor(Function(model) model.ServiceId)
    </div>
    <div class="editor-field">
        @Html.DropDownList("ServiceId", "")
        @Html.ValidationMessageFor(Function(model) model.ServiceId)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

结束使用

所以你不需要

@Html.EditorFor(Function(model) model.ServiceId)

当用户从下拉列表中选择选项并单击创建按钮时,属性ServiceID将自动映射到您的类中,即mvc3与元素的名称一起使用,为您完成所有神奇的工作