将锚定值传递给控制器

时间:2016-11-02 17:41:12

标签: c# ajax controller

我需要将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()控制器方法。

1 个答案:

答案 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')

还可以进行其他更多的语义改进,例如使用按钮而不是锚,因为这不是真的作为锚点。