[解決済み] モデルの検証を行うために、モデルを剣道のComboboxにバインドする方法は?
質問
ビューモデルを使用して、クライアントサイドとサーバーサイドの両方でフォームの検証を行おうとしています。KendoのComboboxを除いて、すべてのバリデーションが動作しています。モデルをマルチセレクトにバインドしましたが、リストと選択された値をどのように区別したらいいのかわかりません。
コンボボックス
@(Html.Kendo().ComboBox()
.Name("roleRequest_UnavailableRoles")
.BindTo(new SelectList(Model.roleRequest.UnavailableRoles, "Value", "Text"))
.HtmlAttributes(new { name="addRoleName", style = "width:250px", required = true, roleValidationMessage = "foo" })
.Value(Model.roleRequest.roleName)
.DataTextField("Text")
.DataValueField("Value")
.Filter(FilterType.StartsWith)
.Placeholder("Select Role...")
.AutoBind(false)
.Suggest(true)
)
ビューモデル。
[Required]
public string roleName { get; set; }
[Required]
public string usersName { get; set; }
[Required]
public string application { get; set; }
[Required]
public string reasons { get; set; }
public virtual IEnumerable<SelectListItem> UnavailableRoles
{
get
{
var unavailableList = new List<Role>();
unavailableList = RoleHelper.GetUnavailableRoles(usersName, application);
var unavailableRolesList = (unavailableList.Distinct());
var UnavailableRoles = new List<SelectListItem>();
foreach (var role in unavailableRolesList)
{
UnavailableRoles.Add(new SelectListItem
{
Value = role.RoleID.ToString(),
Text = role.RoleName
});
}
return new SelectList(UnavailableRoles, "Value", "Text");
}
}
コントローラーです。 [HttpPost】の場合] public ContentResult RoleRequest(AddRoleRequestViewModel viewModel) { if (ModelState.IsValid) { return コンテンツ("1"); return コンテンツ("");
上記のコードはコンパイルできますが、コンボボックスでアイテムが選択されていない場合、コントローラが無効を返すようにできません。
よろしくお願いします。
解決方法は?
もし
Html.Kendo().ComboBoxFor()
を使うと、このようにモデルのプロパティにバインドすることができます。
@(Html.Kendo().ComboBoxFor(m => m.UnavailableRoles)
.Name("roleRequest_UnavailableRoles")
.BindTo(new SelectList(Model.roleRequest.UnavailableRoles, "Value", "Text"))
.HtmlAttributes(new { name="addRoleName", style = "width:250px", required = true, roleValidationMessage = "foo" })
.Value(Model.roleRequest.roleName)
.DataTextField("Text")
.DataValueField("Value")
.Filter(FilterType.StartsWith)
.Placeholder("Select Role...")
.AutoBind(false)
.Suggest(true)
)
ただし、この場合は
Name()
または
Value()
を使用するときに処理されるからです。
ComboBoxFor()
これにより、コントロールとモデルとの結合が行われ、また、バリデーションが使用できるようになります。
また、あなたのモデルで見逃していたことが一つあります。 実際の値(オプション以外)には、別のプロパティが必要でしょう。 私ならこのようにします。
public List<Guid> RoleIds { get; set; } // or List<int> if you're using integers
に変更し、ComboBoxFor を
ComboBoxFor(x => x.RoleIds)
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] foreachループの現在の反復処理のインデックスを取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?