我有一个部分观点:
@using confidenitial.DB.DataLayer;
<div id="page">
@{
List<Network> networks = (List<Network>)ViewData["Networks"];
<table>
<tr>
<td style="text-align: center">ID</td>
<td style="text-align: center">Name</td>
<td style="text-align: center" colspan="2">Modify</td>
</tr>
@foreach (Network n in networks)
{
<tr>
<td style="text-align: center">
@n.ID
</td>
<td style="text-align: center">
@n.Name
</td>
<td>
<button>Rename</button>
</td>
<td>
<button onclick="removeNetwork()">Delete</button>
</td>
</tr>
}
</table>
}
</div>
@section Scripts{
<script>
function removeNetwork() {
$.ajax({
url: "/Admin/removeNetwork",
type: "GET",
data: { id: id}
}).done(function (result) {
$('#page').html(result);
});
}
</script>
}
控制器:
[HttpPost]
public ActionResult removeNetwork(int id)
{
//query
return PartialView("_Whatever");
}
我希望它从控制器调用removeNetwork
方法但由于某种原因它没有触发。我会说这是我的错,但我在调用addNetwork
时写了完全相同的ajax,并且工作正常。
@section Scripts{
<script>
function addNetwork() {
$.ajax({
url: "/Admin/addNetwork",
type: "GET",
data: { newNetwork: newNetwork.value }
}).done(function (result) {
$('#table').html(result);
$('#newNetwork').val("");
});
}
</script>
}
两者之间有什么大的区别?我无法弄清楚。
修改
我发现问题所在:该功能不能在局部视图中,所以我把它放在主视图中。我在查看服务器吐出的html后发现了这个(脚本部分没有包含这个脚本)。
答案 0 :(得分:2)
您的removeButton
方法正在读取变量id
的值,该变量既未声明为全局,也未传递给方法。因此,请更改您的方法以将其作为参数接受。
<script>
function removeNetwork(id) {
$.ajax({
url: "/Admin/removeNetwork",
type: "GET",
data: { id: id }
}).done(function (result) {
$('#page').html(result);
});
}
</script>
并在您的标记中,将其传递给您的方法。
<td>
<button onclick="removeNetwork(@n.ID)">Delete</button>
</td>
这应该有用。
答案 1 :(得分:0)
您在ajax中执行GET请求(类型:“GET”)但您的操作配置为用作POST请求([HttpPost]属性)您必须通过[HttpGet]或ajax请求更改操作的属性通过POST而不是GET