0

我对 Javascript 和 jQuery 很陌生。

我正在关注此线程中提出的代码:Validate JQuery UI modal form inside another form in MVC 4 to create a modal form using the Data Annotations validation。

它可以很好地进行验证,但是当我正确填写表单并尝试保存信息并关闭它时,它会保存,但对话框不会关闭并保持这种状态,直到我刷新页面。

这是我的表单的编码方式:

@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

谢谢,如果有人可以提供帮助。

4

1 回答 1

0

修复。

只需将 Json 值返回给 if (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);
    }

}

于 2013-04-25T13:08:09.427 回答