Asp Mvc3 アプリがあります。私の見解では、剣道+ノックアウトjsを使用しています。剣道バリデーターでクライアント側の検証を処理しています。私はasp mvc3に非常に慣れていないため、サーバー側の検証を機能させることができません。
これは私のビジネスオブジェクトです:
[Validator(typeof(FranchiseInfoValidator))]
public class FranchiseInfo
{
public string FullName { get; set; }
public string ShortName { get; set; }
}
}
FluentValidation を使用しています。これは私の検証ルールの実装です:
public class FranchiseInfoValidator : AbstractValidator<FranchiseInfo>
{
public FranchiseInfoValidator()
{
RuleFor(franchiseInfo => franchiseInfo.FullName).NotEmpty();
RuleFor(franchiseInfo => franchiseInfo.ShortName).NotEmpty();
}
}
これは私のビューモデルです:
public class FranchiseInfoViewModel
{
public string FullName { get; set; }
public string ShortName { get; set; }
}
これは FranchiseInfoViewModel に強く型付けされた私のビューです。
@model MvcApplication2.Models.FranchiseInfoViewModel
<script src="../../Scripts/Details.js" type="text/javascript"></script>
<form id="franchiseForm" action="" style="font-family: Trebuchet MS, Verdana, Helvetica, Sans-Serif;">
<table>
<tr>
<td><label for="fullName">FullName:</label></td>
<td><input id="fullName" data-bind= "value: FullName" /></td>
</tr>
<tr>
<td><label for="shortName">ShortName:</label></td>
<td><input id="shortName" data-bind= "value: shortName" /></td>
</tr>
</table>
<button id="submit" class="k-button" data-bind="click: save" form="franchiseForm">Save Franchise</button>
</form>
フォームを送信すると、javascript 関数を呼び出して保存します。
$(function () {
save = function () {
// some logic
$.ajax({
url: "/franchise/SaveFranchise",
type: "POST",
data: { franchiseInfoViewModel: jsonData },
dataType: 'json',
success: function (data, textStatus, xhr) {
window.location.href = data.redirectToUrl;
}
});
}
});
保存時に、データを json 形式で送信し、そのデータを SaveFranchise Controller に送信しています。
public ActionResult SaveFranchise(string franchiseInfoViewModel)
{
var franchiseInfoVM = JsonConvert.DeserializeObject<FranchiseInfoViewModel>(franchiseInfoViewModel);
if (!ModelState.IsValid)
{
// do some action
}
return View();
}
私が達成したいのは(!ModelState.IsValid)
、ビューに戻って流暢な検証エラー メッセージを表示することです。どういうわけか、私の場合、ModelState.IsValid は常に true です。
前述のように、私は Asp Mvc 3 に非常に慣れていません。私が読んだ記事から、例はフォームをサーバーに送信し (javascript なしで)、バインディングがあり、サーバー検証メッセージがビューに返されます。ただし、ビューは Razor で実装され、クライアント側の検証は jquery を介して行われます。
私の見解では、データバインディング(剣道+ノックアウト)でjavascriptビューモデルを使用しています。私の場合、サーバー側の検証を行うにはどうすればよいですか。私を助けてください。お時間とご尽力いただきありがとうございます。