リモート検証を使用してクライアント側で入力を修正する可能性はありますか?たとえば、ユーザーは日付を010101として入力します。これは、 2001年1月1日を意味します。リモート検証は、修正された値(010101を2001年1月1日)をクライアント側で反映/渡すことができますか?
入力を正しい日付形式にフォーマットするJSがあるシナリオがあります。後で、RemoteValidationを使用する必要がありました。私のリモート検証はddmmyy形式で日付を受け取り(RemoteValidationはJSの前に呼び出されます)、最初にそれを正しい日付に変換してから検証を実行します。その後、JSはまったく呼び出されないため、010101は01-Jan-に変換されません。2001。
編集
助けてもらいたいことが2つあります
1-とにかく、リモート検証関数は、検証のために渡されたモデル/データを変更し、それをビューに戻して、ユーザーがモデル/データの変更されたバージョンを表示できるようにすることができますか?
[削除:2-フォーカスが失われた日付をフォーマットする日付フィールド用のJavaScriptがあります。正常に動作しています。JSと一緒にリモート検証を使用した場合、スクリプトはまったく呼び出されません。]
編集
モデル
public class master
{
public string sometext { get; set; }
public child mychild { get; set; }
}
public class child
{
public child()
{
thedate = DateTime.MaxValue;
}
[Remote("ValidateDate", "Test", ErrorMessage = "Invalid Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:mm/dd/yyyy}", NullDisplayText = "Enter Date")]
public DateTime? thedate { get; set; }
}
意見
@model Models.master
@using Web.Framework
@{
Layout = null;
}
<html>
<head>
<title>Test - My ASP.NET MVC Application</title>
<script src="@Url.Scripts("jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Scripts("jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="@Url.Scripts("modernizr-2.0.6-development-only.js")" type="text/javascript"></script>
<script src="@Url.Scripts("AjaxLogin.js")" type="text/javascript"></script>
<script src="@Url.Scripts("jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Scripts("jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Scripts("jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Scripts("MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Scripts("MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Scripts("myScripts.js")" type="text/javascript"></script>
</head>
<body>
@using (Html.BeginForm("testSubmit", "Test"))
{
@Html.LabelFor(m => m.sometext)
<br />
@Html.TextBoxFor(m => m.sometext)
<br />
@Html.LabelFor(m => m.mychild.thedate)
<br />
@Html.TextBoxFor(m => m.mychild.thedate, new { onblur = "doDate(this, '');" })
@Html.ValidationMessageFor(m => m.mychild.thedate)
<br />
<input type="submit" value = "Submit me" />
}
</body></html>
コントローラ
public ActionResult testSubmit(master model)
{
@ViewBag.Message = "OK";
return View("response");
}
public JsonResult ValidateDate(DateTime? thedate)
{
return Json(HttpContext.Request.QueryString["mychild.thedate"].ToString(), JsonRequestBehavior.AllowGet);
}
私のリモートバリデーターは常にnullを受け取りますがthedate
、クエリ文字列から値にアクセスできますが、値はフォーマットされていません。つまり、リモート検証はJSの前に呼び出されます。つまり、最初にリモート関数で日付をフォーマットしてから検証する必要があります。はJSによって再度フォーマットされ、両方を同期する必要があります。
では、リモート関数でフォーマットされた値を取得したり、リモート関数からビューにフォーマットされた値を渡すにはどうすればよいですか?