当jquery ajax请求时,controller返回'flat'视图

时间:2014-01-04 00:19:05

标签: jquery asp.net-mvc

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

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

enter image description here

我正在编辑bootstrap模式中的记录。就像这个例子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中取得成功,defaut必须被称为我的获取行动,在我的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>

3 个答案:

答案 0 :(得分:0)

考虑到您的代码示例,看起来所有内容都按预期工作。

以下代码正在执行(从screeshot判断):

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 });正在呈现您在浏览器中看到的响应。

答案 1 :(得分:0)

尝试将“datatype”参数添加到ajax请求:

$.ajax({

  dataType: "json",

  url: url,

  data: data,

  success: success

});

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

答案 2 :(得分:0)

对于您的网址,请尝试使用'@ Url.Action(“编辑”,“提供商”)'。