2012-08-13 112 views
1

我试图使用下面的下拉框来选择一系列值来编辑模型。使用模型的下拉列表

到目前为止,我已经得到了下面的代码工作:

@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 
+0

你能告诉我们你的行为和你的模型吗? – Jorge 2012-08-13 15:54:38

+0

编辑如上 – NickP 2012-08-13 18:38:58

回答

1

这是有问题的SelectList你需要告诉给seleclist,这是价值,什么是显示文本。你不能只传递字符串的列表,以正确填充,添加键值像这样

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

值也能像这样在您需要相关服务

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

1D情况或者,像这样的情况下,你需要的唯一的文本值

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

UPDATE

要做到这一点,您需要修改视图和您的操作。

首先在你的行动改变你的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> 

末使用

所以你不” t需要

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

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

+0

这很有道理!谢谢。我知道我现在已经创建了一个下拉框,但是我怎么告诉我的视图需要采用选中的id并将其放在model.ServiceId中,如@ Html.EditorFor(Function(model)model.ServiceId)做? – NickP 2012-08-13 19:05:39

+0

检查我的答案的更新 – Jorge 2012-08-13 19:12:26