带有 javascript 函数参数的 MVC ActionLink
MVC ActionLink with parameter for javascript function
我在下拉菜单中有一个这样的按钮:
<li><button class="btn btn-white btn-sm delete-group fa fa-trash" dataid="@item.InterimReviewId">Delete</button></li>
调用 javascript 函数如下:
$('.delete-group').click(function () {
var url = "/Fiscalizations/Delete";
var id = $(this).attr('dataid');
$.get(url + '/' + id, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
调用模态 window:
<div class="modal fade" id="editor-container" tabindex="-1"
role="dialog" aria-labelledby="editor-title">
<div class="modal-dialog modal-md" role="document">
<div class="modal-content animated flipInY" id="editor-content-container"></div>
</div>
</div>
一切如我所料。我的目标是将按钮与 ActionLink 交换,然后我的问题就开始了。
我写了这样的东西:
<li>@Html.ActionLink("Delete Interim Review", "Delete", "InterimReviews", new { dataid = item.InterimReviewId }, new { @class = "delete-group" })</li>
它正确地调用了函数,但它调用了地址为 /InterimReviews/Delete?dataid=1
的错误 HTTP 请求,而不是模态 window
如有任何解决问题的提示,我将不胜感激
编辑:
我解决了错误请求的问题(contoller 和 Actionlink 中的参数名称不同)。所以现在唯一的问题是 ActionLink javascript 函数不会触发模态 window
当您使用 ActionLink 时,您将创建:
<a href="Delete/InterimReviews" class="delete-group" data-id="">Delete Interim Review</a>
因此,当您单击 link 时,浏览器将导航至 Delete/InterimReviews
。
您需要做的是防止浏览器将 <a>
视为 link (preventDefault()
),您可以这样做:
$('.delete-group').click(function (e) {
e.preventDefault(); //this will stop the link
var url = "/Fiscalizations/Delete";
var id = $(this).attr('dataid');
$.get(url + '/' + id, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
顺便说一句,使用 dataid
作为 html 属性是无效的 - 你应该使用像 data-id
这样的东西,它可以在 razor 中使用 data_id
创建,并且可以使用 $.data('id')
.
读取
点击锚标签通常会向 url 发出正常的 GET 请求。所以你需要防止这种默认行为。您可以使用 jquery preventDefault
方法来执行此操作。另一个选项是方法末尾的 return false
。
假设,Delete
操作方法有一个名为 dataid
的参数,您可以使用 Html.ActionLink
方法,它将生成正确的相对于操作的 url具有正确路由值(查询字符串)的方法(例如:\InterimReviews\Delete?dataid=101
)。如果您的参数名称不同,请更新您的剃刀代码以使用它(您正在使用的重载中的第四个参数)所以您所要做的就是阅读点击的锚标签的url 并将其用于您的通话。无需自己进行任何字符串连接即可将 id 添加到 url!
$(function () {
$('a.delete-group').click(function (e) {
e.preventDefault();
var url = $(this).attr("href");
$.get(url, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
});
我还强烈建议您将删除操作更改为 HttpPost 类型的操作。 updates/deletes 数据应为 POST 类型的任何操作方法。如果您正在显示确认对话框,GET 就可以了。但是对于实际的删除,使用 HttpPost 类型的操作方法并使用 $.post
从客户端调用。
我在下拉菜单中有一个这样的按钮:
<li><button class="btn btn-white btn-sm delete-group fa fa-trash" dataid="@item.InterimReviewId">Delete</button></li>
调用 javascript 函数如下:
$('.delete-group').click(function () {
var url = "/Fiscalizations/Delete";
var id = $(this).attr('dataid');
$.get(url + '/' + id, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
调用模态 window:
<div class="modal fade" id="editor-container" tabindex="-1"
role="dialog" aria-labelledby="editor-title">
<div class="modal-dialog modal-md" role="document">
<div class="modal-content animated flipInY" id="editor-content-container"></div>
</div>
</div>
一切如我所料。我的目标是将按钮与 ActionLink 交换,然后我的问题就开始了。
我写了这样的东西:
<li>@Html.ActionLink("Delete Interim Review", "Delete", "InterimReviews", new { dataid = item.InterimReviewId }, new { @class = "delete-group" })</li>
它正确地调用了函数,但它调用了地址为 /InterimReviews/Delete?dataid=1
如有任何解决问题的提示,我将不胜感激
编辑: 我解决了错误请求的问题(contoller 和 Actionlink 中的参数名称不同)。所以现在唯一的问题是 ActionLink javascript 函数不会触发模态 window
当您使用 ActionLink 时,您将创建:
<a href="Delete/InterimReviews" class="delete-group" data-id="">Delete Interim Review</a>
因此,当您单击 link 时,浏览器将导航至 Delete/InterimReviews
。
您需要做的是防止浏览器将 <a>
视为 link (preventDefault()
),您可以这样做:
$('.delete-group').click(function (e) {
e.preventDefault(); //this will stop the link
var url = "/Fiscalizations/Delete";
var id = $(this).attr('dataid');
$.get(url + '/' + id, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
顺便说一句,使用 dataid
作为 html 属性是无效的 - 你应该使用像 data-id
这样的东西,它可以在 razor 中使用 data_id
创建,并且可以使用 $.data('id')
.
点击锚标签通常会向 url 发出正常的 GET 请求。所以你需要防止这种默认行为。您可以使用 jquery preventDefault
方法来执行此操作。另一个选项是方法末尾的 return false
。
假设,Delete
操作方法有一个名为 dataid
的参数,您可以使用 Html.ActionLink
方法,它将生成正确的相对于操作的 url具有正确路由值(查询字符串)的方法(例如:\InterimReviews\Delete?dataid=101
)。如果您的参数名称不同,请更新您的剃刀代码以使用它(您正在使用的重载中的第四个参数)所以您所要做的就是阅读点击的锚标签的url 并将其用于您的通话。无需自己进行任何字符串连接即可将 id 添加到 url!
$(function () {
$('a.delete-group').click(function (e) {
e.preventDefault();
var url = $(this).attr("href");
$.get(url, function (data) {
$('#editor-content-container').html(data);
$('#editor-container').modal('show');
});
});
});
我还强烈建议您将删除操作更改为 HttpPost 类型的操作。 updates/deletes 数据应为 POST 类型的任何操作方法。如果您正在显示确认对话框,GET 就可以了。但是对于实际的删除,使用 HttpPost 类型的操作方法并使用 $.post
从客户端调用。