2013-04-24 72 views
0

我非常新的JavaScript和jQuery。驗證jQueryUI的模式窗體保持模型數據註釋

我按照這個線程建議代碼:Validate JQuery UI modal form within another form in MVC 4創建使用數據註釋驗證模式窗體。

它正常工作與驗證,但是當我正確填寫表格並儘量保存信息並關閉它,這樣可以節省,但該對話框不會關閉,並保持這種方式,直到我刷新頁面。

下面是我的形式編碼:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId ="editDialog", OnSuccess = "editSucces" })) 
{   
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Editar Usuário</legend> 

     <div class="display-field"> 
      @Html.EditorFor(model => model.IdUsuario, new { id = "idUsuario"}) 
     </div> 

     Nome 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Nome, new { id = "nomeUsuario"}) 
      <br /> 
      @Html.ValidationMessageFor(model => model.Nome) 
     </div> 

     E-mail/Login 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Login, new { id = "loginUsuario"}) 
      <br /> 
      @Html.ValidationMessageFor(model => model.Login) 
     </div> 

     Senha 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Senha, new { id = "senhaUsuario"}) 
      <br /> 
      @Html.ValidationMessageFor(model => model.Senha) 
     </div> 
     <p> 
      <input type="submit" value="Confirmar" /> 
     </p> 
    </fieldset> 
<div> 
    @Html.ActionLink("Cancelar", "Index") 
</div> 
} 

這是我的控制器操作:

public ActionResult Edit(Usuario usuario, string confsenha) 
{ 
     if (usuario.Senha == confsenha) 
     { 
      usuario.DataCadastro = DateTime.Now; 

      if (ModelState.IsValid) 
      { 
       db.Entry(usuario).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      if (Request.IsAjaxRequest()) 
      { 
       return PartialView("_Edit", usuario); 
      } 
      return View(usuario); 

     } 
} 

,這是我的javascript調用:

$(function() { 
$('.openDialog').click(function() { 
    $.ajax({ 
     url: this.href, 
     type: 'GET', 
     cache: false, 
     data: { idUsuario: $('#idUsuario').val() }, 
     success: function (result) { 
      $('#result').html(result).dialog('open'); 
     } 
    }); 
    return false; 
}); 
$('#result').dialog({ 
    autoOpen: false, 
    modal: true, 
    closeOnEscape: false 
}); 
}); 
function editSucces(result) { 
if (result.value) { 
    $('#result').dialog('close');   
    window.location.href = '/usuario/index'; 
} else { 
    $('#result').html(result); 
} 
} 

運行它,我看到它永遠不會輸入這部分的javascript代碼:

if (result.value) { 
    $('#result').dialog('close');   
    window.location.href = '/usuario/index'; 
} 

如此,它從來就沒有到它應該關閉該對話框的一部分。有誰知道爲什麼會發生這種情況?或者result.value應該傳遞什麼?

如果有人可以幫忙,謝謝。

回答

0

修正了它。

剛把成JSON值返回如果(result.value)。非常簡單,但我不得不睡在它上面>。 <

這裏是定影后的代碼:

控制器:

  if (ModelState.IsValid) 
      { 
       db.Entry(usuario).State = EntityState.Modified; 
       db.SaveChanges(); 
       if (Request.IsAjaxRequest()) 
       { 
        return Json(new { cadastro = true }); 
       } 
       else 
       { 
        return RedirectToAction("Index"); 
       } 
      } 

使用Javascript:

function editSucces(result) { 
    if (result.cadastro) { 
     $('#result').dialog('close');   
     window.location.href = '/usuario/index'; 
    } else{ 
     $('#result').html(result); 
    } 

}