2015-04-23 144 views
-1

我需要知道如何将参数传递给调用由运行时生成的Html复选框帮助器生成的JavaScript函数。 这是我的动态生成复选框的控制:从动态创建的@ Html.Checkbox将参数传递给JavaScript函数

@foreach (var app in ViewData["Applications"] as List<RenderController.Models.Application>) 
{ 
    <td> 
     @*@Html.CheckBox(item.NetworkName + app.ProcessName, new { id=item.NetworkName + app.ProcessName, onclick = String.Format("callProcess('{0}', '{1}')",item.NetworkName,app.Name) })*@ 
     @Html.CheckBox(item.NetworkName + app.ProcessName, new Dictionary<string, object> 
     { 
      {"id", String.Concat(item.NetworkName, app.ProcessName)}, 
      {"onclick", "callProcess.call(this)"} 
     }) 
    </td> 
} 

这是我的JavaScript函数:

<script type="text/javascript"> 
    function callProcess(Node, Process) { 
     var url = "/RenderNodes/CallProcess"; 
     var checked = $('#'+Node + Process).is(':checked'); 
    } 
</script> 

语法callProcess.call(this)作品(我测试过的只是将在功能警报),而String.Format()方法在评论@Html.CheckBox()一代无所作为。所以如果我使用call(this),我该如何传递参数item.NetworkNameapp.ProcessName

+0

添加值作为'数据'的属性和使用不显眼的javascipt的 - 例如, (); $('。checkbox')。click(function(){var node = $(this).data('node'); ...' –

+0

并没有意义使用'@ Html.Checkbox()'你不绑定到一个属性,所有这一切正在产生大约3倍的html所需。 –

回答

1

您可以使用data-属性将附加数据添加到html元素,然后在脚本中访问,例如@Html.CheckBox("..", new { data_networkname = item.NetworkName })。然而,在你的情况下使用@Html.CheckBox()毫无意义,因为你没有绑定任何东西,只是产生大量不必要的html,包括相关的隐藏输入。也没有任何意见使用{"id", String.Concat(item.NetworkName, app.ProcessName)},因为你只是生成相同的id属性,无论如何已经由html助手添加。

相反,你可以只使用

<input type"checkbox" class="checkbox" data-networkname="@item.NetworkName" data-processname="@app.ProcessName" /> 

然后在脚本

var url = '@Url.Action("CallProcess", "RenderNodes")'; // dont hard code! 
$('.checkbox').click(function() { 
    var checked = $(this).is(':checked'); 
    var node = $(this).data('networkname'); 
    var process = $(this).data('processname'); 
    .... 
}); 
+0

得到它的工作如下: ' p.Key == app.ProcessName).Value />' – caryatid

0

您在String.Format示例中通过app.Name而不是app.ProcessName。否则,我看不出为什么该代码不适用。

+0

感谢您发现。 – caryatid