我有一个带有表单的ASP.NET MVC应用程序。假设这个表单有任意数量的按钮,每个按钮都有自己的动作。
<input type="button" id="action1" value="One" />
<input type="button" id="action2" value="Two" />
... and so forth
我们希望用户点击一个并点击jQuery动作以提交表单,然后重新发布表单并提供新信息。
有几种方法可以实现这一点。 如何设计优雅的最佳做法是什么?如果可以,请提供代码段。
答案 0 :(得分:3)
很少提到的方法是使用ActionMethodSelectorAttribute:
简而言之,它的工作方式与AcceptVerbs属性非常相似 - 只是通过提交值而不是HTTP方法选择方法。它还可以用于许多其他事情,例如,为AJAX / HTTP请求等选择不同的操作,请求的格式(JSON / XML /等)等。
使用哪种方法 - 切换,属性等 - 取决于具体情况。我不会说这里有最好的做法。
仅举出我所知道的方法:
我很高兴看到一个更好的方法,例如,[SubmitName(“submit1”)]属性on action,OnActionExecuting()检查它并覆盖被调用的动作......但我不知道它是怎么回事可能的。
答案 1 :(得分:2)
设置潜在行动的对象文字:
var actions = {
action1: function(elem) {
// If you just want to submit the form normally
$(elem).closest('form').submit();
...
},
action2: function(elem) {
// If you wanted to ajax load a url-field into a div
var url = $('#url_field').val();
$('.display').load(url);
...
}
}
然后编写一个选择器来抓取所有按钮(根据您的需要特定)并将基于元素id的每个函数附加到click处理程序。使用事件委托('$ .live()')可以在有多个按钮或动态添加按钮时提高案例的性能。
$('input[type=button]').live('click', function(e){
actions[$(this).attr('id')](this);
});
这会在每次点击时调用'actions'变量中的相关操作(你应该验证该函数是否存在)。
然后在每个动作功能中,您可以提交到不同的网址,或者提交ajax,或者加载新信息,或者做任何你想做的事情。就“重新发布表单”而言,这将是一个服务器端函数,它为每个输入元素预先填充其先前的值,就像您在无效提交时所做的那样。
这为您提供了一行代码来处理事件,然后是一个干净的结构来构建您的每个操作。