3

我正在使用 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”'填写该字段。

这不是一个太复杂的表单,所以如果可以避免的话,我不想引入一些新的验证层。我不介意有一个验证帖子。

谢谢,丹

4

2 回答 2

5

我问什么。在过去的两周里,我一直在探索这个话题。(如果您愿意,请查看我最近几天的问题)。我得出的结论是,不幸的是,数据注释和流利的验证在使用淘汰赛的客户端上不起作用。因此,您必须引入另一层验证。

好消息是它经过良好测试并且与淘汰赛一样标准。

您主要有三个选择:

我期待社区倾向于建议使用 jQuery one,但显然主流的淘汰赛验证是那里的首选。它的行为与数据注释非常相似,但显然是在剔除视图模型字段上完成的。

希望这会有所帮助(不要射击信使:))

于 2013-03-11T22:01:15.553 回答
0

我目前正在研究类似的情况,正在做一个混合 web api / MVC 项目。只有详细信息页面从控制器接收任何数据。休息由淘汰赛处理。到目前为止我可以看到的选项(一些经过测试,一些合格的猜测):

  1. 通过 ViewModel 和 Knockout Clientside ViewModel 复制您的验证逻辑(最好使用上面建议的 Knockout-Validation)。我本能地觉得很时髦。
  2. 使用 jquery 不显眼的验证将您的表单设置为常规的 mvc 强类型表单。

1,2:使用敲除/jquery处理事件(当表单被认为有效时)。如果 async post 包含错误,则返回并显示它们(一些 css / less / sass 框架,如 bootstrap 已经准备好 alertbox 类,例如将错误放入)。

  1. 查看MVC 控制工具包 clientblock。我计划自己测试这个选项,看起来很有希望。
  2. 试试KnockoutMvc,这似乎也能帮助解决这个问题。
于 2013-07-17T17:37:43.047 回答