【问题标题】:Pass Anchor Value to Controller将锚值传递给控制器
【发布时间】:2016-11-02 17:41:11
【问题描述】:

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

【问题讨论】:

    标签: c# ajax controller


    【解决方案1】:

    锚没有“值”。

    因此,您可能应该做的第一件事就是将该值存储在数据属性中。比如:

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

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

    【讨论】:

    • 它仍然没有传递值,我应该把它做成一个按钮吗?
    • 我只是尝试使用按钮并使用 value 属性,但它仍然没有工作
    • @LukeRayner:嗯,将元素从a 更改为button 并不是一根魔杖。您可能希望/需要对代码进行其他更改以伴随该更改。至于这个“不工作”,你能更具体一点吗?你做了哪些具体的改变?当您调试它时,它在哪里/如何具体失败?
    • 我已将 getDetails 设置为一个类并更改了 Jquery 以适应此情况,我将您的数据位添加到我的 Jquery 脚本中,并将参数添加到控制器中。我没有收到任何错误,参数只是返回 null
    • &lt;button href="javascript:void(0)" value="@item.Id" class="getDetails"&gt;@Html.DisplayFor(modelItem =&gt; item.Description)&lt;/button&gt; 这就是现在的样子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多