我需要将id传递给我的控制器,但我不确定如何使用我编写的代码。
这是我的cshtml文件:
<script>
$(document).on("click", "#getDetails", function (e) {
$.ajax({
url: '/Home/GetDetails',
contentType: 'application/html; charset=utf-8',
type: 'POST',
dataType: 'html'
})
.success(function(result) {
$('#detailsPlace').html(result);
})
.error(function(xhr, status) {
alert(status);
});
})
</script>
<table class="table">
@foreach (var item in Model)
{
<tr>
<td>
@*<input type="hidden" value="@item.Id" name="partId"/>*@
<a href="javascript:void(0)" value="@item.Id" id="getDetails">@Html.DisplayFor(modelItem => item.Description)</a>
</td>
</tr>
}
</table>
<div id="detailsPlace"></div>
这是我的控制器:
[HttpGet]
public ActionResult Index()
{
var response = _test.GetParts("A");
return View(response);
}
public ActionResult GetDetails()
{
return PartialView();
}
我只想传递
中的值<a href="javascript:void(0)" value="@item.Id" id="getDetails">@Html.DisplayFor(modelItem => item.Description)</a>
进入我的GetDetails()控制器方法。
答案 0 :(得分:0)
锚点没有“值”。
因此,您应该做的第一件事就是将该值存储在数据属性中。类似的东西:
<a href="javascript:void(0)" data-value="@item.Id" id="getDetails">
然后在您的AJAX调用中,您可以从该数据属性中获取它并将其传递给服务器。类似的东西:
$.ajax({
url: '/Home/GetDetails',
contentType: 'application/html; charset=utf-8',
type: 'POST',
data: 'myValue=' + $('#getDetails').data('value')
dataType: 'html'
})
在控制器操作中,您可以期望myValue
值。类似的东西:
public ActionResult GetDetails(string myValue)
您可以使用适合的名称和数据类型,这些只是示例。当然还有其他方法可以做到这一点。但只需发布一个像这样的单个键/值对就可以了。
注意: 您似乎在循环中使用静态HTML id
。如果多个元素具有相同的id
,那么您的HTML无效,并且该HTML上的JavaScript行为未定义。 id
值在HTML中应该是唯一的。
切换到class
可能会更好。例如:
<a href="javascript:void(0)" data-value="@item.Id" class="getDetails">
然后你必须相应地调整你的选择器(JavaScript,CSS等)。获取被点击的元素的值可能根本不需要选择器,这也可以起作用:
$(this).data('value')
还可以进行其他更多的语义改进,例如使用按钮而不是锚,因为这不是真的作为锚点。