我不确定我错过了什么,我尝试了其他一些方法,但我得到了相同的观点,我几个小时就被困在这里。
我的问题是当我试图将部分视图或Json形式的控制器返回到我的jquery ajax函数时,我得到的只是我的Json视图或仅仅是我的部分。像这样:
我正在编辑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>
答案 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
});
答案 2 :(得分:0)
对于您的网址,请尝试使用'@ Url.Action(“编辑”,“提供商”)'。