ASP.net MVC + Dropdown + VB.net


概要

Transactionの入力補助として、Masterの内容を、DropdownListに取得し、Transactionの更新処理を行う。

イメージ

環境

Windows7 32bit SP1
Microsoft SQL Server 11.00.3000
Visual Studio2013 Professional Version12.0 Update4
VB.net

実装

Model

Employee.vb
Public Class Employee
 Public Property Id As Integer
 Public Property Name As String
 Public Property CountryId As String
End Class
Country.vb
Public Class Employee
 Public Property Id As Integer
 Public Property CountryId As String
 Public Property CountryName As String
End Class
SampleContext.vb
Public Class SampleContext
    Inherits DbContext
 Public Sub New()
  MyBase.New("SampleContext")
 End Sub
 Public Property Employees As DbSet(Of Employee)
 Public Property Countries As DbSet(Of Country)
End Class

Control

EmployeeControl.vb
Public Class EmployeeController
    Inherits Controller
 <HttpGet>
 Function Index() As ActionResult
  Return View(db.Employees.ToList())
 End Function

 <HttpGet>
 Function Create() As ActionResult
  Dim emp As New Employee
  Dim ct = db.Countrys.ToList()
  ViewBag.model1 = New SelectList(ct, "Id", "CountryId", emp.CountryId)
  ViewBag.model1 = db.Countries.[Select](Function(m) New SelectListItem() With {
                            .Text = m.CountryName, 
                            .Value = m.CountryId})
  Return View()
 End Function

 <HttpPost>
 Function Create(<Bind(Include:="ID,Name,CountryId")> ByVal employ As Employee) As ActionResult
  If ModelState.IsValid Then
   db.Employees.Add(employ)
   db.SaveChanges()
   Return RedirectToAction("Index")
  End If
  Return View(employ)
 End Function
End Class

View

Index.vbhtml
@modeltype  DropdownHoge.Models.Employee
@Code
    ViewData("Title") = "Create"
End Code
@Using (Html.BeginForm())
@Html.AntiForgeryToken()
    @<div class="form-horizontal">
         <h4>Employee</h4>
         <hr />
        @Html.ValidationSummary(True, "", New With {.class = "text-danger"})
         <div class="form-group">
             @Html.LabelFor(Function(model) model.Name, htmlAttributes:=New With {.class = "control-label col-md-2"})
             <div class="col-md-10">
                 @Html.EditorFor(Function(model) model.Name, New With {.htmlAttributes = New With {.class = "form-control"}})
                 @Html.ValidationMessageFor(Function(model) model.Name, "", New With {.class = "text-danger"})
             </div>
         </div>
         <div class="form-group">
             @Html.LabelFor(Function(model) model.CountryId, htmlAttributes:=New With {.class = "control-label col-sm-2"})
             <div class="col-sm-10">
                 @Html.DropDownListFor(Function(model) model.CountryId, DirectCast(ViewBag.model1, IEnumerable(Of SelectListItem)),"SELECT", New With{.class="form-control"})
             </div>
         </div>
         <div class="form-group">
             <div class="col-md-offset-2 col-md-10">
                 <input type="submit" value="Create" class="btn btn-default" />
             </div>
         </div>
    </div>

End Using
Create.vbhtml
@modeltype  DropdownHoge.Models.Employee
@Code
    ViewData("Title") = "Create"
End Code

<h2>Create</h2>

@Using (Html.BeginForm())
    @Html.AntiForgeryToken()
    @<div class="form-horizontal">
         <h4>Employee</h4>
         <hr />
        @Html.ValidationSummary(True, "", New With {.class = "text-danger"})
         <div class="form-group">
             @Html.LabelFor(Function(model) model.Name, htmlAttributes:=New With {.class = "control-label col-md-2"})
             <div class="col-md-10">
                 @Html.EditorFor(Function(model) model.Name, New With {.htmlAttributes = New With {.class = "form-control"}})
                 @Html.ValidationMessageFor(Function(model) model.Name, "", New With {.class = "text-danger"})
             </div>
         </div>
         <div class="form-group">
             @Html.LabelFor(Function(model) model.CountryId, htmlAttributes:=New With {.class = "control-label col-sm-2"})
             <div class="col-sm-10">
                 @Html.DropDownListFor(Function(model) model.CountryId, DirectCast(ViewBag.model1, IEnumerable(Of SelectListItem)),"SELECT", New With{.class="form-control"})
             </div>
         </div>
         <div class="form-group">
             <div class="col-md-offset-2 col-md-10">
                 <input type="submit" value="Create" class="btn btn-default" />
             </div>
         </div>
    </div>

End Using

画面

最後に

ここまでいきつくのが大変だった。理解が足りないところが多いので、理解後、部分ビューを使っても試してみる。