c# - MVC - 使用 AJAX 调用导致服务器端页面验证在按钮单击时触发

标签 c# javascript ajax asp.net-mvc-3

在我正在开发的应用程序中,我有一个要求,即在单击某个按钮时,会在一些相关的文本框上触发验证;如果它们没有通过,则什么也不会发生,否则会发生从 AJAX 调用触发的操作。此 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 模型的验证。我不知道如何使用 AJAX 调用来执行此操作。我怀疑是 A) 我在工作中使用了错误的工具,或者 B) 我在一项工作中使用了正确的工具,但我需要其他工具。我缺少什么才能触发验证?

最佳答案

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

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

关于c# - MVC - 使用 AJAX 调用导致服务器端页面验证在按钮单击时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506190/

相关文章:

C# 简单的 IF OR 问题

c# - 读取包含大量元素的字符串列表 C#

c# - 尝试在 foreach 循环中将对象 append 到 Enumerable

c# - 在 C# 中的 Linq 语句中使用 Take 时如何返回全部

javascript - AngularJS:手动输入时如何验证日期格式(DD/MM/YYYY)

javascript - JS 在 AJAX 调用返回输出之前返回?

Javascript:检查数组是否是几乎递增的序列

javascript - 匹配不是函数 - 错误

ajax - 具有动态更新 api 的 extjs TreeStore 代理

javascript - JQuery 使用 .html 传递表中的 ajax 数据