我需要知道如何将参数传递给对在运行时生成的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.NetworkName
和app.ProcessName
?
答案 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
。否则,我认为没有理由说该代码不起作用。