将值从隐藏字段传递到ActionLink,然后传递到控制器

时间:2015-07-13 19:30:39

标签: c# asp.net asp.net-mvc razor

我试图通过让用户选中他们想要的报告的复选框来动态设置StudentIds。当他们单击ActionLink时,我使用jQuery在隐藏字段中设置id的值。我需要Action Link来从隐藏字段中读取ID。

这些值在隐藏字段中设置,但它们不会从actionLink传递给控制器​​。

我需要将ReportIds传递给控制器​​。

        @Html.ActionLink("PrintMed", "GetMedEdVerificationReport", "Student", new { studentIdList = Model.ReportIds }, new { @class = "button print_selected print_selectedMedEd disabled" })



        @Html.HiddenFor(model => model.ReportIds)

的javascript

$('.print_selectedMedEd').bind('click', function () {
    var ids = getPrintIds();
    if (ids.length == 0) {
        return false;
    }

    $('#ReportIds').val(ids.toString());


    return true;
});

3 个答案:

答案 0 :(得分:3)

当asp.net mvc渲染你的ActionLink时,它会生成一个链接,其中包含模型上的参数。如果您更改模型的值,则不会更改ActionLink生成的输出的值。

鉴于此,您必须再次获取该值,尝试生成不带参数的ACtionLink:

@Html.ActionLink("PrintMed", "GetMedEdVerificationReport", "Student", null, new { @class = "button print_selected print_selectedMedEd disabled" })

在javascript方面,您可以尝试使用on方法绑定事件处理程序并从事件参数调用preventDefault方法,以获取示例:

$('.print_selectedMedEd').on('click', function (e) {
    e.preventDefault();
    var ids = getPrintIds();
    if (ids.length > 0) {
       $('#@Html.IdFor(model => model.ReportIds)').val(ids.toString());

       // make an url to redirect
       var url = $(this).prop("href") + "?studentIdList=" + ids.toString();
       // redirect using the generated url
       window.location.href = url;
    }
});

请务必使用Html.IdForm()确保您拥有特定媒体资源的正确ID。

答案 1 :(得分:2)

这是因为@Html.ActionLink不使用隐藏字段来发出请求。一旦动作链接呈现它就变成了  <a href="/Student/GetMedEdVerificationReport/reportIds..."> PrintMed </a>  所以你需要修改锚标签上的html。

您应该使用Html.Beginform来传递模型。

@using (Html.BeginForm("GetMedEdVerificationReport", "Student", FormMethod.Post, null))
    {
        @Html.HiddenFor(model => model.ReportIds)
        <input type="submit" value="PrintMed" />
    }

答案 2 :(得分:0)

             @Html.HiddenFor(modelItem => item.OrderId)
            <td>

                <input type="button" value="Pickup" onclick="location.href='@Url.Action("Edit", "Assignment", new { ID = item.OrderId })'" />