Как установить выбранное значение в выпадающем списке на странице редактирования MVC - PullRequest
0 голосов
/ 02 декабря 2018

Как установить DropdownList выбранный элемент на странице редактирования ?.Какой код я должен написать в DropdownList вместо «Ничего» * ​​1001 *

ِDebuge mode - picture 1

Debuge mode - picture 2

List View that showing 1 Row - picture 3

Edit view page with DDL - picture 4

Это контроллер:

' GET: MachinInfo/Edit/5
Function MachinInfoEdit(ByVal id As Integer?) As ActionResult
    If IsNothing(id) Then
        Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
    End If
    Dim machinInfo As MachinInfo = db.MachinInfo.Find(id)
    If IsNothing(machinInfo) Then
        Return HttpNotFound()
    End If
    ViewBag.BrandID = New SelectList(db.Brand, "Id", "BrandName")

    Return View(machinInfo)
End Function

' POST: MachinInfo/Edit/5
<HttpPost()>
<ValidateAntiForgeryToken()>
Function MachinInfoEdit(<Bind(Include:="Id,PelakStateID,MachinStateID,OrgCode,MachineID,BrandID,MachintypeID,NPlate,NPlateL,NPlateM,NPlateR,CardSerial,VIN,Myear,Color,GearTypeID,MCost,Mcamp,Description,LogI,LogE")> ByVal machinInfo As MachinInfo) As ActionResult
    If ModelState.IsValid Then

        db.Entry(machinInfo).State = EntityState.Modified
        db.SaveChanges()
        Return RedirectToAction("Index")
    End If
    ViewBag.BrandID = New SelectList(db.Brand, "Id", "BrandName")

    Return View(machinInfo)
End Function

и мой вид редактирования:

<div class="form-group col-md-6">
    @Html.LabelFor(Function(model) model.BrandID, htmlAttributes:=New With {.class = "control-label col-md-2"})
    <div class="col-md-10">
        @Html.DropDownList("BrandID", Nothing, "-select-", htmlAttributes:=New With {.class = "form-control"})
        @Html.ValidationMessageFor(Function(model) model.BrandID, "", New With {.class = "text-danger"})
    </div>
 </div>

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете использовать SelectList перегрузку с 4 параметрами и передавать выбранное значение в качестве последнего параметра:

ViewBag.BrandID = New SelectList(db.Brand, "Id", "BrandName", id.ToString())
ViewBag.DefaultBrand = id.ToString()

Затем передать содержимое ViewBag в DropDownList помощник с DirectCastили TryCast:

@Html.DropDownList("BrandID", TryCast(ViewBag.BrandID, SelectList), ViewBag.DefaultBrand, htmlAttributes := New With { .class = "form-control"})

Примечание:

Лучше создать свойство viewmodel, имеющее тип SelectList или IEnumerable(Of SelectListItem) -

Public Class ViewModel
    ' other properties

    Public Property SelectedBrandID As Integer
    Public Property BrandList As IEnumerable(Of SelectListItem)
End Class

Затем заполните его внутри действия контроллера:

Dim model As New ViewModel
model.BrandList = db.Brand.[Select](Function(x) New SelectListItem() With {
                          .Text = x.Id, 
                          .Value = x.BrandName,
                          .Selected = If(x.Id = id, True, False) }))

Return View(model)

И, наконец, используйте DropDownListFor помощник для отображения списков опций:

@Html.DropDownListFor(Function(model) model.BrandID, Model.BrandList, Nothing, htmlAttributes := New With { .class = "form-control"})

Связанная проблема:

MVC.NET в VB - выберите Список в Html.Dropdownlist

...