MSAjax MVC 3 Razor ビューから生成されたフォームで jQuery ajax 投稿を使用しました。
このフォームでは、クライアント側の検証は入力中に正しく機能しますが、ユーザーが「検索」ボタンをクリックして「POST」を生成すると、クライアント側の検証は実行を停止します!!
これはモデルです:
public class AnagraficaSearchViewModel : ViewModelBase
{
[Required]
[StringLength(2)]
public virtual string Ricerca { get; set; }
}
これはコントローラーです:
[HttpPost]
public ActionResult Index(AnagraficaSearchViewModel model)
{
if (model.Ricerca == "12")
{
model.Status = Status.Error;
model.Message = "Errore!";
ModelState.AddModelError("", Cult.Testo(Cult.CultTextsIDs.StatusError));
}
if (Request.IsAjaxRequest()) return PartialView("SearchCriteria", model);
return View(model);
}
これがメイン ビューです。
<div id="search-anagrafica-criteria">
@{ Html.RenderPartial("SearchCriteria", Model); }
</div>
これが SearchCriteria ビューです。
@model AnagraficaSearchViewModel
<script type="text/javascript">
function CheckRow() {
$("form").valid();
abs.message.convertErrorsToTooltips();
};
function InitSearch() {
$("#Ricerca").bind("propertychange keyup input paste", function () {
setTimeout("CheckRow();", 100);
});
CheckRow();
$("#Ricerca").focus();
}
$(function () {
$('form').submit(function (e) {
e.preventDefault();
var $form = $(this);
if (!$form.valid()) {
abs.message.convertErrorsToTooltips();
return false;
}
$.validator.unobtrusive.parse($('form')); //added
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$('#search-anagrafica-criteria').html(result);
InitSearch();
},
complete: function (result) {
CheckRow();
}
});
}
return false;
});
InitSearch();
});
</script>
@using (Ajax.BeginForm("Index", "Anagrafica", null, new AjaxOptions { UpdateTargetId = "search-anagrafica-criteria", HttpMethod = "POST", OnComplete = "CheckRow()" }))
{
@Html.LabelFor(el => el.Ricerca)
@Html.TextBoxFor(el => el.Ricerca)
@Html.ValidationMessageFor(el => el.Ricerca)
<button class="btn btn-primary" type="submit" style="margin-left: 10px">Search</button>
@Html.ValidationSummary(true)
}
何時間も働いても何も変わらない!!
助けてくれてありがとう!