質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2582閲覧

DropDownListForのVBでの書き方を知りたいです。

Eltk

総合スコア51

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/05/28 15:04

前提・実現したいこと

DropDownListForの書き方(言語はVisual Basic)を知りたいです。

発生している問題・エラーメッセージ

Create.vbhtmlファイルの「 IEnumerable(Of SelectListItem)ViewBag.SelectOptions」の箇所に波線でエラーが出ていました。 「IEnumerable(Of SelectListItem)はインターフェース型であり、式として使用することはできません。」

該当のソースコード

VisualBasic

1※Test.vbのファイルです。 2 3Imports System.ComponentModel.DataAnnotations 4Imports System.ComponentModel 5Imports Microsoft.VisualBasic 6 7Public Class Test 8 Inherits System.Web.Mvc.Controller 9 10 <Key()> 11 <DisplayName("ID")> 12 Public Property Id As String 13 14 <DisplayName("判定")> 15 Public Property Judge As Integer 16 17End Class

VisualBasic

1※TestsController.vbのファイルです。 2※今回の質問に不要だと思われるActionを一部省略しております。 3 4Imports System 5Imports System.Collections.Generic 6Imports System.Data 7Imports System.Data.Entity 8Imports System.Linq 9Imports System.Net 10Imports System.Web 11Imports System.Web.Mvc 12Imports MvcApp 13 14Namespace Controllers 15 Public Class TestsController 16 Inherits Controller 17 18 Private db As New MyMvcContext 19 20 ' GET: Tests 21 Function Index() As ActionResult 22 Return View(db.Tests.ToList()) 23 End Function 24 25 ' GET: Tests/Create 26 Function Create() As ActionResult 27 ViewBag.SelectOptions = New SelectListItem() { 28 New SelectListItem() With {.Value = "1", .Text = "合格"}, 29 New SelectListItem() With {.Value = "0", .Text = "不合格"} 30 } 31 32 Return View() 33 End Function 34 35 ' POST: Tests/Create 36 '過多ポスティング攻撃を防止するには、バインド先とする特定のプロパティを有効にしてください。 37 '詳細については、https://go.microsoft.com/fwlink/?LinkId=317598 を参照してください。 38 <HttpPost()> 39 <ValidateAntiForgeryToken()> 40 Function Create(<Bind(Include:="Id, Judge")> ByVal test As Test) As ActionResult 41 If ModelState.IsValid Then 42 db.Tests.Add(test) 43 db.SaveChanges() 44 Return RedirectToAction("Index") 45 End If 46 Return View(test) 47 End Function 48 End Class 49End Namespace

VisualBasic

1※Create.vbhtmlのViewファイルです。 2※コード真ん中あたりの箇所で、エラーが発生しております。 3 4@ModelType MvcApp.Test 5 6@Code 7 ViewData("Title") = "Create" 8End Code 9 10<h2>Create</h2> 11 12@Using (Html.BeginForm()) 13 @Html.AntiForgeryToken() 14 15 @<div class="form-horizontal"> 16 <h4>Test</h4> 17 <hr /> 18 @Html.ValidationSummary(True, "", New With {.class = "text-danger"}) 19 <div class="form-group"> 20 @Html.LabelFor(Function(model) model.Id, htmlAttributes:=New With {.class = "control-label col-md-2"}) 21 <div class="col-md-10"> 22 @Html.EditorFor(Function(model) model.Id, New With {.htmlAttributes = New With {.class = "form-control"}}) 23 @Html.ValidationMessageFor(Function(model) model.Id, "", New With {.class = "text-danger"}) 24 </div> 25 </div> 26 27 <div class="form-group"> 28 @Html.DropDownListFor(Function(model) model.Judge, IEnumerable(Of SelectListItem)ViewBag.SelectOptions, New With {.Class = "form-control"}) 29 </div> 30 31 <div class="form-group"> 32 <div class="col-md-offset-2 col-md-10"> 33 <input type="submit" value="Create" class="btn btn-default" /> 34 </div> 35 </div> 36 </div> 37End Using 38 39<div> 40 @Html.ActionLink("Back to List", "Index") 41</div> 42 43@Section Scripts 44 @Scripts.Render("~/bundles/jqueryval") 45End Section

試したこと

以下の記事を参考にしつつ、C#とVBの変換サイトを使って変換してみました。
https://www.buildinsider.net/web/bookaspmvc5/040204

今回のエラー箇所については、変換がうまくできなかったため、色々試した結果が、上記のCreate.vbhtmlのファイルになります。

【C#とVBの変換サイト】
https://converter.telerik.com/

補足情報(FW/ツールのバージョンなど)

統合開発環境
Visual Studio2019
(言語:VB.NET、プロジェクトテンプレート:ASP.NET Webアプリケーション MVC)

使用PC
Windows10

※平日は仕事のため、返信が19:30-22:00になります。
※休日の返信は不定期です。
申し訳ございませんが、どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

キャストという言葉を知ってますか? 知らなければまずググって調べてどういうものか理解してください。

VB.NET のキャストのやり方が間違ってます。

今回のエラー箇所については、変換がうまくできなかったため、

とのことですが、telerik の変換サービスでも使い方で変換できるはず。以下がその結果です。

var x = (IEnumerable<SelectListItem>)ViewBag.SelectOptions;

 ↓↓↓

Dim x = CType(ViewBag.SelectOptions, IEnumerable(Of SelectListItem))

ただ、今回そこを直して局所的なエラーは消せたからと言って、全体的な動きが期待したものになるかは怪しいですが。

DropDownListFor を使うといろいろ予期ない結果を生むことがありますので DropDownList を使うことをお勧めします。詳しくは以下の記事を見てください。

DropDownList への SelectList の渡し方
http://surferonwww.info/BlogEngine/post/2019/02/25/how-to-give-selectlist-object-to-dropdownlist.aspx

投稿2020/05/29 00:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2020/05/29 12:22

>SurferOnWww様 キャストの意味は知っております。 (後で調べてわかりましたが、C#のコードがキャストしているコードだったのですね) 教えていただいたコードに修正しましたところ、(実行前に発生していた)エラーは解決されました。 ありがとうございます。 実行時にまた別のエラーが発生しておりますので、(言われているような)予期しない結果、不具合なのかもしれませんが、一度、模索してみます。 参考記事もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問