从View中将Button ID传递给MVC Controller

时间:2012-02-23 13:34:43

标签: javascript jquery asp.net-mvc-3 razor

我的.cshtml页面中有一个按钮。 我想将按钮的id传递给控制器​​动作。 这是我目前的情况:

@foreach (var item in Model)
{
    <div id="report">@Html.ActionLink(@item.Name, "Parameterize", "Report", new { Id = @item.Id }, null )</div><br /><br />                           
    <input id="@item.Id" type="button" onclick="Test()" class="button1" value="Update" />

}

在Firebug中,我可以看到id被正确获取:

enter image description here

现在在js代码中,这是我正在尝试的,但由于某种原因,在控制器操作中id仍为null:

<script type="text/javascript">
    function Test() {       
        var itemId = $('#report').attr('id');
            var url = '@Url.Action("UpdateReport/", "Report")';
            var data = { Id:itemId };
              $.post(url, data, function (result) {
                  var id = '#postedFor' + postId;
                  $(id).html(result);

            });                   
    }
</script>

在控制器操作中我有这个,此时id为null:

 public ActionResult UpdateReport(string id)
        {
            return View("Index");
        }

每个建议都更受欢迎。 在此先感谢Laziale

3 个答案:

答案 0 :(得分:1)

您正在生成许多具有完全相同“id”值的 <div>元素。元素的“id”在整个页面上必须是唯一的,否则会发生奇怪的事情。

因此,$('#report')无法正常工作。也许你可以这样做:

@foreach (var item in Model)
{
    <div id="report_@item.Id">@Html.ActionLink(@item.Name, "Parameterize", "Report", new { Id = @item.Id }, null )</div><br /><br />                           
    <input id="@item.Id" type="button" onclick="Test()" class="button1" value="Update" />

}

或者,您可以将input元素直接传递给处理程序:

  <input id="@item.Id" type="button" onclick="Test(this)" class="button1" value="Update" />

然后:

function Test(item) {       
    var itemId = item.id,
        var url = '@Url.Action("UpdateReport/", "Report")';
        var data = { Id:itemId };
          $.post(url, data, function (result) {
              var id = '#postedFor' + postId;
              $(id).html(result);

        });                   
}

答案 1 :(得分:1)

这一行:

var itemId = $('#report').attr('id');

使用id报告获取div的id。

您希望将按钮传递给函数test()并使用它来获取其id:

<input id="@item.Id" type="button" onclick="Test(this)" ...

然后在你的js Test()函数中:

var itemId = $(this).attr('Id');

另请注意,属性名称区分大小写。你写了“id”,但你的属性叫做“Id”。

答案 2 :(得分:0)

你的选择器关闭:

var itemId = $('#report').attr('id');

这将获得id id report元素的{{1}}值。我认为这不是你想要的。