2013-01-24 18 views
3

在我正在处理的应用程序上,我有一个要求,在点击某个按钮时,验证会触发一些相关的文本框;如果它们没有通过,则不会发生任何事情,否则会发生从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)我正在为一项工作使用正确的工具,但我需要其他工具。我错过了什么可以导致验证开火?

回答

2

当您点击'test-pager'链接时,该操作将被调用,但表单的验证不会触发,因为您的链接不是提交。如果你想验证工作,你必须在表单上有一个提交按钮。当用户点击它时,验证会触发。所以测试寻呼机改变这样的事情:

<input type="submit" id="test-pager" class="button" /> 
+0

工作正常!事实证明,我还建议将一些电子邮件发送逻辑从控制器下移到View Model对象,并让控制器使用不同的动作来知道要调用什么(以及我的单元测试,为此)*最终裁决:*我有一半正确的工具。你先生,提供另一半。 –

-1

或(如果我理解正确的问题),你可以绑定地址文本框更改事件,并在其中调用testPage功能。

相关问题