【问题标题】:How to invoke a controller method after a checkbox gets clicked?单击复选框后如何调用控制器方法?
【发布时间】:2012-09-08 02:30:48
【问题描述】:

是否可以像ActionLink 一样让CheckBox 在点击时调用控制器方法?基本上,我想替换这个ActionLink

@Html.ActionLink("Switch status", "SwitchTaskIsComplete", "Task", new {
    taskId = task.TaskId, 
    isComplete = !task.IsComplete, 
    userId = Model.UserId
}, null)

带有@Html.CheckBox,它调用相同的方法

SwitchTasksIsComplete(int taskId, bool isComplete, int userId)

来自TaskController,并在每次被点击时使用其checked 属性作为isComplete 参数。

【问题讨论】:

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


    【解决方案1】:

    您可以为此使用 HTML onclick

    @Html.CheckBox("mycheckbox", new { onclick="triggerLink()" })
    

    使用 @Url.Action 而不是 @Html.ActionLink 来获取 URL:

    <script>
        function triggerLink() {
            var theUrl = '@Url.Action("SwitchTaskIsComplete", "Task", new {taskId = task.TaskId, isComplete = !task.IsComplete, userId = Model.UserId}, null)';
            window.location = theUrl;
        }
    </script>
    

    您也可以将整个表达式内联到属性中:

    @{
        var url = Url.Action("SwitchTaskIsComplete", "Task", new {taskId = task.TaskId, isComplete = !task.IsComplete, userId = Model.UserId}, null);
    }
    @Html.CheckBox("mycheckbox", new { onclick="window.location = '" + url + "'" })
    

    【讨论】:

    • @McGarnagle 我如何在复选框旁边添加文本,例如"Unread messages [CheckBox]",是否有类似:@Html.CheckBox("Unread messages", "mycheckbox", new { onclick="triggerLink()" }) 谢谢
    【解决方案2】:
    @{
        var url = Url.Action("action", "controller");
    }
    <label class="some-style">
       <input type="checkbox" onclick="window.location='@url'" />
       <span class="Some-other-style">Your Label</span>
    </label>
    

    此解决方案实现了一个带有 url 动作的常规 html 复选框表达式,每当单击文本框时,该动作都会提交给控制器。您还可以在需要了解复选框状态的情况下包含一个值。

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2022-09-27
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多