2011-08-17 29 views
0

我有具有检查像按钮关闭后它的价值并没有发布到控制器

if (form["submit"].ToString() == "Continue") 
{ 

} 

的控制器和我有按钮,这是做提交

<button name="submit" value="Continue">Continue</button> 

这是所有工作得很顺利,我决定在提交时禁用继续按钮以防止使用此功能双击:

$('form').submit(function() { 
       if ($(this).valid()) { 
        $(':submit', this).attr('disabled', 'disabled'); 
       } 
      }); 

所以现在我没有得到价值form["submit"]张贴在控制器上。

任何想法如何解决这个问题?

我想仍然可以防止第二次点击,但能够获得form["submit"]值发布在控制器上。

回答

1

你能控制submit值的隐藏字段的形式吗?我无法告诉你可能需要什么其他逻辑,但当表单呈现时,可以将隐藏字段的值设置为提交按钮的值,并在必要时使用下面的第一个脚本更改它。只要它具有name属性并且已启用(您很少会禁用隐藏字段),那么它会在表单提交时发布。

$(function() { 
    // this assumes your button has id="myButton" attribute 
    $(':hidden[name="submit"]').val($('#myButton').val()); 
}); 

当然在窗体的,你需要有名称的隐藏字段=“提交”

<input type="hidden" name="submit" value="Continue" /> 

然后,每当你的表单的状态发生变化,修改按钮的禁用状态隐藏字段的值反映值(如果它完全改变)。

也有框架,你可能会发现这样的用户界面功能有用。想起了KnockoutJS。它可以用来“绑定”输入元素的“值”。这个小例子可能是矫枉过正的,但如果你的UI扩展,它可能会很有用。如果您有兴趣,我在下面添加了标记,脚本和评论。

$(function() { 
    var viewModel = { 
     submitValue: ko.observable("Continue") 
    }; 

    ko.applyBindings(viewModel); 

    $('form').submit(function() { 
     if($(this).valid()) { 
      // the following line will change the both the hidden field's value 
      // as well as the button's value attribute 
      viewModel.submitValue("some other value"); 

      // I couldn't follow your selector here, but please note I changed 
      // the name of the submit button in the markup below. 
      $(':submit, this).attr('disabled', 'disabled'); 
     } 
    }); 
}); 

KnockoutJS需要使用data-bind属性设置你的元素。在你的情况下,你会绑定一个属性,像这样的多个元素:

<button name="submitButton" data-bind="value: submitValue"/>Continue</button> 
<!-- and bind the same value similarly in the hidden field--> 
<input type="hidden" name="submit" data-bind="value: submitValue"/>