从动态创建的@ Html.Checkbox

时间:2015-04-23 21:54:14

标签: javascript asp.net-mvc

我需要知道如何将参数传递给对在运行时生成的Html复选框助手创建的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

2 个答案:

答案 0 :(得分:1)

您可以使用data-属性向html元素添加其他数据,然后在脚本中进行访问,例如@Html.CheckBox("..", new { data_networkname = item.NetworkName })。但是在你的情况下使用@Html.CheckBox()是没有意义的,因为你没有绑定到任何东西,你只是生成了很多不必要的html,包括相关的隐藏输入。使用{"id", String.Concat(item.NetworkName, app.ProcessName)}也没有任何意义,因为您只是生成了html帮助程序已添加的相同id属性。

相反,你可以使用

<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');
    ....
});

答案 1 :(得分:0)

您在app.Name示例中传递了app.ProcessName而不是String.Format。否则,我认为没有理由说该代码不起作用。

相关问题