[解決済み] bindingContext.ModelNameが空ですか?
2022-01-30 03:39:45
質問
を適用しようとしています。 Darin Dimitrovの回答 しかし、私の実装ではbindingContext.ModelNameは""に等しいです。
これが私のビュー・モデルです。
public class UrunViewModel
{
public Urun Urun { get; set; }
public Type UrunType { get; set; }
}
以下は、モデルタイプを投稿するビューの部分です。
@model UrunViewModel
@{
ViewBag.Title = "Tablo Ekle";
var types = new List<Tuple<string, Type>>();
types.Add(new Tuple<string, Type>("Tuval Baskı", typeof(TuvalBaski)));
types.Add(new Tuple<string, Type>("Yağlı Boya", typeof(YagliBoya)));
}
<h2>Tablo Ekle</h2>
@using (Html.BeginForm("UrunEkle", "Yonetici")) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Tablo</legend>
@Html.DropDownListFor(m => m.UrunType, new SelectList(types, "Item2", "Item1" ))
そして、これが私のカスタムモデルバインダーです。
public class UrunBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type type)
{
var typeValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Urun");
var model = Activator.CreateInstance((Type)typeValue.ConvertTo(typeof(Type)));
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
}
最後に、Global.asax.csの行です。
ModelBinders.Binders.Add(typeof(UrunViewModel), new UrunBinder());
ここでは、オーバーライドされた
CreateModel
関数で、デバッグモードでは
bindingContext.ModelName
は "" と同じです。また
typeValue
はnullなので
CreateInstance
関数は失敗します。
解決方法は?
は必要ないと思います。
bindingContext.ModelName
プロパティを使用することができます。
で行く。 Darin Dimitrovの回答 は、以下のように試すことができるようです。 まず、フォームにタイプ用の隠しフィールドが必要です。
@using (Html.BeginForm("UrunEkle", "Yonetici")) {
@Html.Hidden("UrunType", Model.Urun.GetType())
そして、モデルバインディングで(基本的にDarin Dimitrovからコピーしたものです)。
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue("UrunType");
var type = Type.GetType(
(string)typeValue.ConvertTo(typeof(string)),
true
);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
参照
この記事
の詳細については
bindingContext.ModelName
が入力されます。
関連
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] 空のIEnumerableを返すにはどうしたらいいですか?
-
[解決済み】nullと空のコレクションのどちらを返すのが良いですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】Nullableオブジェクトは値を持たなければならない?