我的 asp.net mvc 3 页面上有多个动态按钮。在 asp.net mvc 3 中处理按钮单击的最佳方法是什么?asp.net 中没有事件处理,那么处理的最佳实践是什么?
3 回答
您可以通过订阅点击事件来使用 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
}
...
}
取决于按钮在做什么。如果它们在逻辑上是独立的操作,那么您可以将每个回发到服务器端的单独操作。这通常也有效,它们是相同操作的变体,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>
如果按钮不需要相同的表单数据,那么您可以创建两个具有不同操作方法的表单。这是最简单的解决方案。
如果你需要使用相同的表单数据,那么有很多方法,包括 Darin 和 tvanfosson 的方法。还有一种基于属性的方法,它将根据单击的按钮选择正确的操作方法。