1

我的 asp.net mvc 3 页面上有多个动态按钮。在 asp.net mvc 3 中处理按钮单击的最佳方法是什么?asp.net 中没有事件处理,那么处理的最佳实践是什么?

4

3 回答 3

2

您可以通过订阅点击事件来使用 javascript 处理按钮点击。例如,使用 jQuery,您可以给这些按钮一个类,然后:

$(function() {
    $('.someClass').click(function() {
        // a button was clicked, this will point to the actual button
    });
});

或者,如果这些是表单的提交按钮,您可以给它们相同的名称和不同的值,然后在服务器上测试名称参数的值。它的值将等于单击的按钮。

例如,假设您有以下带有多个提交按钮的表单:

@using (Html.BeginForm())
{
    ... some input fields

    <button type="submit" name="Button" value="delete">Delete data</button>
    <button type="submit" name="Button" value="save">Save data</button>
}

现在在您发布给您的控制器操作中,您可以确定单击了哪个按钮:

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    var button = Request["button"];
    if (button == "save")
    {
        // the save button was clicked
    }
    else if (button == "delete")
    {
        // the delete button was clicked
    }

    ...
}
于 2011-10-15T14:22:20.560 回答
1

取决于按钮在做什么。如果它们在逻辑上是独立的操作,那么您可以将每个回发到服务器端的单独操作。这通常也有效,它们是相同操作的变体,Save vs. Cancel,例如,Save 将表单发回,而 Cancel 将重定向到您之前的 url(例如,从编辑返回到详细信息)。如果按钮代表将被发送回同一操作的不同数据,您可以给它们不同的值。如果按钮被命名,则这些值将与表单的其余部分一起返回,假设它们包含在表单中。如果从 AJAX 回发,您可能需要将按钮值与表单一起显式序列化。

保存/取消示例

@using (Html.BeginForm())
{
   //...
   <button type="submit" class="submit-button button">Save</button>
   @Html.ActionLink( "Cancel", "details", new { ID = Model.ID }, new { @class = "cancel-button button" } )
}

然后使用 CSS,也许结合 jQuery UI 来设置按钮样式。

<script type="text/javascript">
   $(function() {
       $('.button').button();
       ...
   });
</script>
于 2011-10-15T14:25:30.197 回答
1

如果按钮不需要相同的表单数据,那么您可以创建两个具有不同操作方法的表单。这是最简单的解决方案。

如果你需要使用相同的表单数据,那么有很多方法,包括 Darin 和 tvanfosson 的方法。还有一种基于属性的方法,它将根据单击的按钮选择正确的操作方法。

http://www.dotnetcurry.com/ShowArticle.aspx?ID=724

于 2011-10-15T16:49:26.110 回答