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;
}

質問:メッセージ/成功の値を取り戻すことはできますが、ビューモデルの検証を実行する必要もあります。AJAX呼び出しを使用してこれを行う方法がわかりません。私の疑いは、A)仕事に間違ったツールを使用しているか、B)1つの仕事に正しいツールを使用しているが、別のものが必要であるということです。検証を実行させるために何が欠けていますか?

4

2 に答える 2

2

「test-pager」リンクをクリックすると、アクションが呼び出されますが、リンクが送信ではないため、フォームの検証はトリガーされません。検証作業を行う場合は、フォームに送信ボタンが必要です。ユーザーがそれをクリックすると、検証が開始されます。したがって、テストページャーを次のようなものに変更します。

<input type="submit" id="test-pager" class="button" />
于 2013-01-24T21:17:15.633 に答える
-1

または(質問を正しく理解している場合)、アドレステキストボックスの変更イベントをバインドし、その中でtestPage関数を呼び出すことができます。

于 2013-01-24T21:33:44.057 に答える