1

私はこのようなモデルを持っています(簡略化)

public class User
{
  [Required]
  public string UserName { get; set; }

  // Other fields
}

viewModel次のようなノックアウト付きの MVC カミソリ ビュー:

@using (Html.BeginForm("MyAction", FormMethod.Post, new { id = "profileEditorForm" }))
{
  @Html.ValidationSummary(false)

  @Html.LabelFor(n => n.UserName)
  @Html.TextBoxFor(n => n.UserName, new { data_bind = "value: UserName" })
  @Html.ValidationMessageFor(n => n.UserName)

  @* Other fields *@    

  <p>
    <input type="submit" value="Save" alt="" title="" />
    <a href="/">Cancel</a>
  </p>
}


<script type="text/javascript">

  $(function() {
    var vm = new viewModel(@(Html.Raw(Json.Encode(@Model))));
    ko.applyBindings(vm);

    $("#profileEditorForm").validate({
      submitHandler: function(form) {
        alert('Validating ' + ko.toJSON(vm));
        if (vm.save)
          window.location.href = "/";
        return false;
      }
    });
  });

  var viewModel = function(model) {
    var self = this;
    self.UserName = ko.observable(model.UserName);
    // Other fields

    self.save = function() {
      alert('Saving ' + ko.toJSON(self));
    }
  };
};
</script>

検証機能を通過しても(アラートの挿入がそれを示しています)、クライアント側の検証を提供してから、保存してMVCアクションに無効なものをポストバックすることはできません。

このフォームでクライアント側の検証 (web.confir で有効になっています) を有効にする方法を教えてください。その日を台無しにするのはノックアウトですか(すべてのバインディングは完全に正常に機能していますが?それとも、私が見ているだけで見えないものですか?

大変助かります!

4

2 に答える 2

2

検証は、ノックアウト バインディングでは機能しません....

クライアント側で検証を複製する必要があります。より速い方法はノックアウト検証プラグインを使用することですが、大量のデータがあると遅くなります..

https://github.com/ericmbarnard/Knockout-検証

または、jquery 検証を使用することもできます。

于 2013-03-16T08:41:45.497 に答える
0

モデル検証は、ノックアウト バインディングでは機能しません。ノックアウト検証.js ファイルをダウンロードして、ノックアウト検証を使用する必要があります。

例 :

KnockoutJS での UserName の検証

var self = this;

self.UserName = ko.observable(UserName).extend({
    required: {
        message:"Please enter User Name"
    }
});
于 2014-05-21T05:11:24.110 に答える