【问题标题】:controller returns 'flat' view when jquery ajax request当 jquery ajax 请求时,控制器返回“平面”视图
【发布时间】:2014-01-04 00:19:04
【问题描述】:

我不确定我错过了什么,我尝试了其他一些方法,但我得到了相同的观点,我被困在这里几个小时了。

我的问题是,当我试图将部分视图或 Json 表单从我的控制器返回到我的 jquery ajax 函数时,我得到的只是我的 Json 作为视图或只是我的部分视图。像这样:

我正在以引导模式编辑记录。就像这个例子Edit Modal

我的 JS:

 // Handle "Edit Person" button click.
    // This will make an ajax call, get information for person,
    // put it all in the modal and display it
    $(document).on('click', '.edit-provider', function () {
        var personId = $(this).attr('id');
        $.ajax({
            url: '/Providers/Edit',
            type: 'GET',
            data: { id: personId },
            success: function (data) {
                $('#mdleditprovider').html(data).modal('show');
            }
        });
    });

    // Handle submitting of new information for Person.
    // This will attempt to save new info
    // If save was successful, it will close the Modal and reload page to see updated info
    // Otherwise it will only reload contents of the Modal
    $(document).on('click', '#btn-submit-edit-provider', function () {
        var self = $(this);
        $.ajax({
            url: '/Providers/Edit',
            type: 'POST',
            data: self.closest('form').serialize(),
            success: function (data) {
                if (data.success == true) {
                    $('#mdleditprovider').modal('hide');
                } else {
                    $('#mdleditprovider').html(data);
                }
            }
        });
    });
</script>

我的控制器:

[HttpGet]
    public ActionResult Edit(int? id)
    {
        if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        Provider provider = db.Providers.Find(id);
        if (provider == null) return new HttpStatusCodeResult(HttpStatusCode.NotFound);

        return PartialView("Modals/Providers/FrmEdit", provider);
    }

    [HttpPost]
    public ActionResult Edit(Provider provider)
    {
        if (ModelState.IsValid)
        {
            db.Entry(db.Providers.Find(provider.Id)).CurrentValues.SetValues(provider);
            db.SaveChanges();
            return Json(new { success = true });
        }
        // else
        return PartialView("Modals/Providers/FrmEdit", provider);
    }

当我调试我的 js 时,它从未在我的第二个函数中成功。我不确定我的错误是否不在这部分代码中,但我认为是的。

谢谢

更新

遇到错误我不知道为什么

更新(2)

所以现在我试图找到这里发生了什么,我注意到我的表单有一个默认的 POST,我想这可能就是为什么我的代码在我的 js 中没有成功,默认值必须被称为我的 get操作,在我的 js 中,我现在正尝试进行不同的发布操作,但它不起作用是否可以更改这些默认值?我不确定这是否能解决我正在测试的问题。

我在这里解释一下我的想法:

在这个控制器中,我想用编辑操作结果填充一个模式,然后在我的更新操作中获取我的帖子

    [HttpGet]
    public ActionResult Edit(int? id)
    {
        if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        Provider provider = db.Providers.Find(id);
        if (provider == null) return new HttpStatusCodeResult(HttpStatusCode.NotFound);

        return PartialView("Modals/Providers/FrmEdit", provider);
    }

    [HttpPost]
    public ActionResult Update(Provider provider)
    {
        if (ModelState.IsValid)
        {
            db.Entry(db.Providers.Find(provider.Id)).CurrentValues.SetValues(provider);
            db.SaveChanges();
            return View("Index",db.Providers.ToList());
        }
        // else
        return PartialView("Modals/Providers/FrmEdit",provider);
    }

这是我正在使用的 js,但我得到一个 http notfound(编辑帖子)

  <script>
    // Handle "Edit Person" button click.
    // This will make an ajax call, get information for person,
    // put it all in the modal and display it
    $(document).on('click', '.edit-provider', function () {
        var personId = $(this).attr('id');
        $.ajax({
            url: '/Providers/Edit',
            type: 'GET',
            data: { id: personId },
            success: function (data) {
                $('#mdleditprovider').html(data).modal('show');
            }
        });
    });
    $(function () {
        $('#frmeditprovider').on('submit', function (e) {
            e.preventDefault();
            $.ajax({
                url: '/Providers/Update', //this is the submit URL
                type: 'POST', //or POST
                data: $('#subscribe-email-form').serialize(),
                success: function (data) {
                    alert('successfully submitted');
                }
            });
        });
    });
</script>

【问题讨论】:

    标签: jquery asp.net-mvc


    【解决方案1】:

    根据您的代码示例,看起来一切都按预期工作。

    以下代码正在执行(从截图来看):

    if (ModelState.IsValid)
    {
        db.Entry(db.Providers.Find(provider.Id)).CurrentValues.SetValues(provider);
        db.SaveChanges();
        return Json(new { success = true });
    }
    

    具体来说,return Json(new { success = true }); 正在呈现您在浏览器中看到的响应。

    【讨论】:

    • 问题是我不想看到那个,我希望 Json 作为我的数据参数在成功的 jquery ajax 调用中
    • 您在 javaScript 控制台中看到的错误是什么?你有帮助调试的示例应用吗?
    【解决方案2】:

    尝试在 ajax 请求中添加“datatype”参数:

    $.ajax({
    
      dataType: "json",
    
      url: url,
    
      data: data,
    
      success: success
    
    });
    

    http://api.jquery.com/jQuery.getJSON/

    【讨论】:

    • 不工作,我什至无法调试我的 js,因为它不会在错误时停止,我添加并警告错误,它显示它非常快,这就是我知道它遇到错误的方式。跨度>
    【解决方案3】:

    对于您的 url 位置,请尝试使用 '@Url.Action("Edit","Providers")'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多