在我正在处理的应用程序上,我有一个要求,在点击某个按钮时,验证会触发一些相关的文本框;如果它们没有通过,则不会发生任何事情,否则会发生从AJAX调用中触发的操作。此AJAX调用返回有关操作成功的一些消息。这是在发生MVC - 使用AJAX调用导致服务器端页面验证触发按钮点击
我的部分观点看起来有点像这样:
<div>
<div id='cell-phone'>
@Model.ValidationMessageFor(x=>x.Model.CellNumber)
@Model.TextBoxFor(x=>x.Model.CellNumber)
</div>
<div id='pager'>
<!-- Ditto, only x.Model.Pager; yes, some people use pagers still. -->
</div>
<div id='page-address'>
<!-- ... x.Model.PageAddress ... -->
</div>
<div id='pager-test'>
<a href='#' id='test-pager' class='button'>Test</a>
<span id='test-result'></span>
</div>
</div>
<script>
var $cellNum = $('#cell-phone input'),
$pagerNum = $('#pager input'),
$pageAddress = $('#page-address input'),
$testPager = $('#pager-test'),
$testResult = $('#test-result');
$(document).ready(function() {
$testPager.click(function() {
pagerTest();
});
});
function pagerTest() {
var args = { address: $pageAddress.val() };
$.getJSON('@Url.Action("SendTestPage")', args, function(result) {
$testResult.html(result.Message);
});
}
</script>
...下来在服务器级别...
public JsonResult SendTestPage(string address)
{
// SNIP: Other unnecessary details.
var result = new EmailSendResult
{
success = SendEmailMethod(address)
};
result.message = result.success
? "Message sent!"
: "Couldn't send message...";
return result;
}
....
public class EmailSendResult
{
public bool success;
public string message;
}
问:虽然我能得到消息/成功值返回,我还需要启动View Model的验证。我没有看到如何使用AJAX调用来做到这一点。我的怀疑是:A)我使用了错误的工具来完成这项工作,或者B)我正在为一项工作使用正确的工具,但我需要其他工具。我错过了什么可以导致验证开火?
工作正常!事实证明,我还建议将一些电子邮件发送逻辑从控制器下移到View Model对象,并让控制器使用不同的动作来知道要调用什么(以及我的单元测试,为此)*最终裁决:*我有一半正确的工具。你先生,提供另一半。 –