2

RemoteValidation 属性を持つモデルがあります。

データベースに既に存在する「test」と入力し、[OK] ボタン以外の領域をクリックすると、「test already exists.」という赤色になります。ここまでは順調ですね。[OK] ボタンをクリックすると、作成アクションへの投稿が行われます。

常に true である ModelState.IsValid ???

したがって、データがデータベースに入力され、重複例外が発生します...

私はこれが私のサイトで以前に機能していたことを知っています。いくつかのものを変更しただけで、Subversion はそうではありません

アクティベートされたああああ...

私は何を間違っていますか?

[HttpPost]
        public ActionResult Create(Release release)
        {
            if (ModelState.IsValid)
            {
                _releaseDataProvider.AddRelease(release);
                return Json(new { success = true });
            }
            return PartialView(release);            
        }

public JsonResult ReleaseExists(string Name)
        {
            bool releaseExists = _releaseDataProvider.ReleaseExists(Name);
            if (!releaseExists)
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(false, JsonRequestBehavior.AllowGet);
            }
        }


$.ajaxSetup({ cache: false });

     $(document).ready(function () {
         $('#CreateRelease').click(function (event) { loadDialog(this, event, createRelease); });        
     });

     function loadDialog(link, e, ajaxRequest) {

         e.preventDefault();        
         var $title = link.innerHTML;
         var $contenturl = $(link).attr('href');
         var $dialog = $('<div></div>');
         var $height = $(link).attr('data-dialog-height');
         var $width = $(link).attr('data-dialog-width');

         $dialog.load($contenturl).dialog({
             title: $title,
             autoOpen: true,
             modal: true,
             show: 'fade',
             hide: 'fade',
             width: $width,
             height: $height,
             buttons: {
                 "OK": function () {
                     ajaxRequest($(this), $('form', this));
                 },
                 "Cancel": function () {
                     $dialog.dialog("close");
                 }
             }
         });        
     } 

     function createRelease(dlg, form) { 
         $.ajax({
             url: $(form).attr('action'),
             type: 'POST',
             data: form.serialize(),
             success: function (response) {
                 if (response.success) {
                     dlg.dialog("close"); 
                     // Update UI                    
                 }
                 else {
                     // Reload the dialog with the form to show model/validation errors 
                     dlg.html(response);
                 }
             },
             error: function (XMLHttpRequest, textStatus, errorThrown) {              
                 alert(textStatus + '-' + XMLHttpRequest.responseText);
             }
         });
     } 
4

1 に答える 1

3

常に true である ModelState.IsValid ???

これは正常です。リモート検証ルールは、AJAX を介してコントローラー アクションを呼び出した場合にのみ適用されます。フォームが正常に送信された場合、同じアクションは呼び出されません。したがって、POST アクションで対応する検証メソッドを呼び出すのはあなた次第です。

[HttpPost]
public ActionResult Create(Release release)
{
    if (ModelState.IsValid && !_releaseDataProvider.ReleaseExists(release.Name))
    {
        _releaseDataProvider.AddRelease(release);
        return Json(new { success = true });
    }
    return PartialView(release);            
}
于 2012-05-30T19:30:31.167 に答える