如何将 actionlink 的 id 值传递到我的 Asp.net Mvc 项目中的 javascript 函数
How to Pass id value of actionlink to javascript function in my Asp.net Mvc Project
我有一个 table 部门。现在我为每个部门创建了控制器,每个部门都有 index.cshtml。
但是他们使用相同的功能。我在每个索引页中对他们的 departmentId 进行了硬编码。
例如,部门 IT 的 departmentId = 1
public class ItController : Controller
{
// GET: It
public ActionResult Index()
{
return View();
}
}
在它的索引页面中,我用 decleration var id = 1; 进行了硬编码;像这样
<div class="panel panel-body">
<div class="col-md-4 table-responsive" id="productsTable"></div>
</div>
<script type="text/javascript">
var id = 1; // for the department that id is 1 so I have to create index for every department and hard code like this
function AllProductsByDepartmentId(id) {
var tbl = $('#productsTable');
$.ajax({
cache: false,
url: '/Home/GetAllProductsByDepartmentId?id=' + id,
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html',
success: function (result) {
tbl.empty().append(result);
},
error: function () {
}
});
}
</script>
但是这样做并不好,因为如果通过一些重新更改部门的 Id 或者当我下次创建一个新部门时
我必须再次硬编码......
我想要的是首先我想从数据库动态填充我的 _Layout 中的那些部门。
所以我创建了控制器
public class DepartmentsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Departments
public async Task<ActionResult> Index()
{
return View(await db.Departments.ToListAsync());
}
}
这是我的 Departments PartialView,我想在 _Layout.cshtml 中填充它,但我不知道该怎么做以及如何 link 它们成为一个函数...
@model IEnumerable<Inventory.Models.Departments>
@foreach (var item in Model) {
@Html.ActionLink(modelItem => item.DepartmentName???????, ??????, ?????, new { id = item.DepartmentId })
}
和link他们到这个java函数
function AllProductsByDepartmentId(id)
{
// ......
}
我想我必须创建另一个通用控制器来为所有人创建一个索引页 departments.But 如何动态创建动作 link 并将它们 link 到 java脚本函数。提前致谢!
在这种情况下不需要使用@Html.ActionLink()
来生成link。你 foreach
循环可以只是
@foreach (var item in Model) {
<a href="#" class="details" data-id="@item.DepartmentId">@item.DepartmentName</a>
}
请注意,DepartmentId
的值作为 data
属性添加到 link。
那么你的脚本就是
var url = '@Url.Action("GetAllProductsByDepartmentId", "Home")';
var tbl = $('#productsTable');
$('.details').click(function() {
tbl.load(url, { id: $(this).data('id') });
});
我有一个 table 部门。现在我为每个部门创建了控制器,每个部门都有 index.cshtml。 但是他们使用相同的功能。我在每个索引页中对他们的 departmentId 进行了硬编码。 例如,部门 IT 的 departmentId = 1
public class ItController : Controller
{
// GET: It
public ActionResult Index()
{
return View();
}
}
在它的索引页面中,我用 decleration var id = 1; 进行了硬编码;像这样
<div class="panel panel-body">
<div class="col-md-4 table-responsive" id="productsTable"></div>
</div>
<script type="text/javascript">
var id = 1; // for the department that id is 1 so I have to create index for every department and hard code like this
function AllProductsByDepartmentId(id) {
var tbl = $('#productsTable');
$.ajax({
cache: false,
url: '/Home/GetAllProductsByDepartmentId?id=' + id,
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html',
success: function (result) {
tbl.empty().append(result);
},
error: function () {
}
});
}
</script>
但是这样做并不好,因为如果通过一些重新更改部门的 Id 或者当我下次创建一个新部门时 我必须再次硬编码...... 我想要的是首先我想从数据库动态填充我的 _Layout 中的那些部门。 所以我创建了控制器
public class DepartmentsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Departments
public async Task<ActionResult> Index()
{
return View(await db.Departments.ToListAsync());
}
}
这是我的 Departments PartialView,我想在 _Layout.cshtml 中填充它,但我不知道该怎么做以及如何 link 它们成为一个函数...
@model IEnumerable<Inventory.Models.Departments>
@foreach (var item in Model) {
@Html.ActionLink(modelItem => item.DepartmentName???????, ??????, ?????, new { id = item.DepartmentId })
}
和link他们到这个java函数
function AllProductsByDepartmentId(id)
{
// ......
}
我想我必须创建另一个通用控制器来为所有人创建一个索引页 departments.But 如何动态创建动作 link 并将它们 link 到 java脚本函数。提前致谢!
在这种情况下不需要使用@Html.ActionLink()
来生成link。你 foreach
循环可以只是
@foreach (var item in Model) {
<a href="#" class="details" data-id="@item.DepartmentId">@item.DepartmentName</a>
}
请注意,DepartmentId
的值作为 data
属性添加到 link。
那么你的脚本就是
var url = '@Url.Action("GetAllProductsByDepartmentId", "Home")';
var tbl = $('#productsTable');
$('.details').click(function() {
tbl.load(url, { id: $(this).data('id') });
});