MVC验证在Knockoutjs后丢失(MVC validation lost in Knockou

2019-08-17 10:06发布

我使用MVC4和淘汰赛。 我有一个强类型的视图模型一个页面上的表单。 在该视图模型我有一些验证定义,例如:

[Required(ErrorMessage = "Title is required")]
public string Title { get; set; }

如果我做一个标准的后向窗体,不填写必填字段,我的行动看,该模型是无效的,并返回到视图,并显示一个主要的验证消息,因为我有@Html.ValidationSummary在我的形式。 各个字段也被标记为无效(用消息),因为我已经@Html.ValidationMessageFor与字段相关联

于是我加淘汰赛和,而不是仅仅发布形式我现在请ko.utils.postJson($("form")[0], self); 。 现在大部分一切正常,如果我发布形式不填充必填字段,我的动作检测,该模型是无效的,并返回到视图,只是现在个人验证消息显示不出来。

在字段中的填充之前的帖子也被丢失。 我试图通过阅读MVC中的视图模型和像这样的变量设置为这些值来解决这个问题。

var model = @Html.Raw(Json.Encode(Model));

然后在我的淘汰赛视图模型设定那个值

self.Title = ko.observable(model.Title);

但后来当我进入“1”,这将填补与现场“的“1”时,失败后返回。

这是不是太复杂的一种形式,所以我不希望引入一些新的验证层,如果能避免它。 我不介意学生要验证后。

谢谢,丹

Answer 1:

我的问题是什么。 我是探索过去2周这个话题。 (如果你想查找从最近几天我的问题)。 我来的结论,即数据的注释和流利的验证不会对不幸采用淘汰赛客户端工作。 因此,你必须引入验证的另一层。

好消息是,它很好的测试和标准的淘汰赛是。

您主要有三种选择:

  • 淘汰赛验证
  • 磕磕
  • jQuery验证

我期待社会倾向于使用jQuery一个建议,但显然淘汰赛主流验证是首选那里。 它的表现非常相似数据的注释,但显然是在淘汰赛视图模型场进行。

希望这有助于(不拍的使者:))



Answer 2:

林寻找到类似的情况在当下,做一个混合Web API / MVC项目。 在仅细节页面从控制器收到任何数据。 休息所击倒处理。 选项,我可以看到SOFAR(一些测试,一些有条件的猜测):

  1. 通过重复的视图模型和淘汰赛客户方视图模型(使用preferrably淘汰赛验证上面建议)您validationlogic。 本能地觉得时髦给我。
  2. 设置您的形式使用jQuery不显眼的验证规则的MVC强类型的形式。

1,2:使用基因敲除/ jquery的处理事件(当形式被认为是有效的)。 如果异步后包含错误返回,并呈现它们(如引导一些CSS /少/上海社会科学院框架有例如准备alertbox类把错误)。

  1. 退房MVC控制工具包clientblock 。 我计划测试这个选项自己,看起来很有希望。
  2. 尝试KnockoutMvc ,也似乎能够帮助与此有关。


文章来源: MVC validation lost in Knockoutjs post