2

以下是 ASP.NET MVC 中的视图模型:

public class Email
{
  public string Selected { get; set; }
  public string Name { get; set; }
}
public class User
{
  public string UserName { get; set; }
  public IList<Email> Emails { get; set; }
}

它被传递到视图中,在定义淘汰视图模型时看起来像这样:

var viewModel = {
  UserName: ko.observable("@Model.UserName"),
  Emails: ko.observableArray(@Html.Json(@Model.Emails) || []),
  // many other things
}

我想确保Email.Selectedrequired. 如何使用列表而不是单个对象来做到这一点。我知道这一定是最简单的问题,但我找不到有关该主题的任何内容。

我在客户端使用淘汰赛验证,因为 Fluent 和数据注释不幸不能与淘汰赛一起使用。

4

1 回答 1

2

正如我在评论中提到的剔除自定义验证可以提供帮助,这里我添加了一个示例,说明如何在您的情况下使用剔除自定义验证:

var viewModel = {
  UserName: ko.observable("@Model.UserName"),
  Emails: ko.observableArray(@Html.Json(@Model.Emails) || []).
          extend({
             customRequired: { message: 'Selected is required' }
          });

  // many other things
}


ko.validation.rules['customRequired'] = {
    validator: function (emailList) {
        var pass = true;
        ko.utils.arrayFirst(emailList(), function(email){
           if(email.Selected == '')       //if Selected property is empty
           {
             pass = false;
             return true;                 //break the loop
           }
        });
       return pass;
    }
};
于 2013-03-12T03:03:30.653 回答