2012-02-23 52 views
1

我的.cshtml页面中有一个按钮。 我想将按钮的ID传递给控制器​​操作。 这里是我目前:从按钮传递按钮ID到MVC控制器

@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仍然为空:

<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

回答

1

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

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

@foreach (var item in Model) 
{ 
    <div id="[email protected]">@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 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); 

     });     
} 
+0

谢谢,这工作顺利。 – Laziale 2012-02-23 13:59:44

0

你的选择看起来关:

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

这是会得到与reportidid值的元素的。我不认为这就是你想要的。

+0

但它只是一个函数定义;如果在事件发生之前它不被调用,那么它可以在“准备好”处理程序之外。 – Pointy 2012-02-23 13:38:34

1

这条线:

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

正在使用th获取div的id电子身份证报告。

你想通过按钮的功能测试(),并用它来获得其ID:

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

然后在你的JS测试()函数:

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

还要注意,属性名称区分大小写。你写了“id”,但你的属性被称为“Id”。

+0

感谢您的回复,但var itemId = $(this).attr('Id'); 也给我空值。 – Laziale 2012-02-23 13:55:17