单击按钮时加载部分视图仅在第一次单击时触发

时间:2014-06-26 16:48:15

标签: asp.net-mvc model-view-controller twitter-bootstrap-3 partial-views

我有以下代码:

@model pedidosOnlineMVC.Models.SuperUser
@{
    ViewBag.Title = "MySystem";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Administration</h2>
@Html.AntiForgeryToken()
@using(var p = Html.Bootstrap().Begin(new Panel()))
{   
    using (p.BeginBody())
    {
        @Html.Bootstrap().Button().Text("Register new  administrator").Id("btnReg")
        @Html.Bootstrap().Button().Text("List administrators").Id("btnList")
        @Html.Bootstrap().Button().Text("Search administrator").Id("btnSeek")   
        using (var ip = Html.Bootstrap().Begin(new Panel()))
        {
            using (ip.BeginBody())
            {
                <div id="partials">
                </div>
            }
        }     
    }
}

正确的JQuery编码:

$(document).ready(
            function () {
                $('#btnReg').click(function () {
                    $.get('@Url.Action("partialRegAdmin", "SuperUser")', function (data) {
                        $('#partials').replaceWith(data);
                    });
                });
                $('#btnList').click(function () {
                    $.get('@Url.Action("partialListAdmin", "SuperUser")', function (data) {
                        $('#partials').replaceWith(data);
                    });
                });
                $('#btnSeek').click(function () {
                    $.get('@Url.Action("partialSeekAdmin", "SuperUser")', function (data) {
                        $('#partials').replaceWith(data);
                    });
                });
            });

在第一次单击任意三个按钮时它可以正常工作,但是在点击一个按钮后,其他两个按钮将不再工作。 我在这里阅读了一些帖子,认为它可能是一个缓存问题,所以我尝试使用$.ajax({cache: false}),尝试使用[OutputCache(Duration = 0)],尝试创建以下属性:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetMaxAge(new TimeSpan(0, 0, 0, 0));
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}

一切都没有用......任何人都知道可能出现什么问题?


编辑: 部分partialRegAdmin视图的请求代码:

@model pedidosOnlineMVC.Models.Administrador
@using (var f = Html.Bootstrap().Begin(new Form()))
{
    @f.FormGroup().CustomControls(Html.AntiForgeryToken())
    @f.FormGroup().TextBoxFor(model=>model.nome)
    @f.FormGroup().TextBoxFor(model=>model.cpf).Data(new {mask="999.999.999-99"})
    @f.FormGroup().TextBoxFor(model=>model.telefone)
    @f.FormGroup().TextBoxFor(model=>model.login)
    @f.FormGroup().PasswordFor(model=>model.senha)
    @f.FormGroup().CustomControls(@Html.Bootstrap().SubmitButton().Text("Cadastrar"))
}

1 个答案:

答案 0 :(得分:1)

你想要

$('#partials').html(data);

而不是

$('#partials').replaceWith(data);

基本上,当您第一次单击时,页面上的#partials将完全替换为从服务器返回的任何html。由于PartialView不包含标识为partials的元素,因此对$('#partials')的后续调用找不到任何内容,因此不会替换任何内容。

另一方面,

html将替换内容,在页面上留下partials以供进一步使用。