*初投稿
使用する必要がある Ajax 投稿用の JQuery エラー ハンドラーがあります。このように、その要素のフィールド名に基づいて html にエラーを追加します。
$(document).ready(function () {
function myHandler(e, error) {
var tag = "";
if (error.Success == true) { $('.field-validation-error').remove(); return; } // if success remove old validation and don't continue
if (error.Success == false) { $('.field-validation-error').remove(); } // if success remove old validation and continue
for (i = 0; i < error.Errors.length; i++) {
var t = error.Errors[i];
//get error key and assign it to id
tag = t.Key;
//clear down any existing json-validation
for (j = 0; j < t.Value.length; j++) {
//this part assumes that our error key is the same as our inputs name
$('<span class="field-validation-error">' + t.Value[j].ErrorMessage + '</span>').insertAfter('input[name="' + tag + '"], textarea[name="' + tag + '"], select[name="' + tag + '"], span[name="' + tag + '"]');
}
}
}
$.subscribe("/******/errors", myHandler);
});
これは、次のようにコントローラ レベルでカスタムのモデル状態エラーを追加しようとするまで、流暢な検証設定ですぐに使用できます。
foreach (var item in model.Locations)
{
var cityRepos = new CityRepository(NhSession);
var cityItem = cityRepos.GetAll().FirstOrDefault(o => o.Country.Id == item.CountryID && o.Name == item.City);
if (cityItem == null)
item.City
ModelState.AddModelError("City", string.Format(@"The city ""{0}"" was not found, please ensure you have spelt it correctly. TODO: add a mail to link here with city not found subject", item.City));
}
問題は、modelstate エラーを、魔法の文字列「City」ではなく、html フィールド名に添付する必要があることです。html name プロパティは MVC で生成され、次のようになります。
name="Locations[0].City"
以前にhtmlヘルパーでこの問題に遭遇し、次の方法を使用しました:
.GetFullHtmlFieldName(
ExpressionHelper.GetExpressionText(propertySelector)
);
その場合に私の問題を解決しました。
私の質問は、MVC ポスト アクションのモデル プロパティでこのメソッドを使用して、元の html name プロパティを取得できますか?
前もって感謝します