我正在使用MVC4和淘汰赛。我在页面上有一个表单,该表单是一个强类型的视图模型。在该视图模型中,我定义了一些验证,例如:
[Required(ErrorMessage = "Title is required")]
public string Title { get; set; }
如果我在没有填写必填字段的情况下对表单执行标准发布,我的操作会看到该模型无效并返回到视图,并显示主验证消息,因为我在@Html.ValidationSummary
中有@Html.ValidationMessageFor
形成。单个字段也标记为无效(带有消息),因为我有ko.utils.postJson($("form")[0], self);
与字段
然后我添加了淘汰赛,而不只是发布我现在称之为var model = @Html.Raw(Json.Encode(Model));
的表格。现在大多数一切正常,如果我发布的表单中没有填充必填字段,我的操作检测到模型无效并返回到视图,除非现在没有显示单个验证消息。
帖子前填写的字段也会丢失。我尝试通过读取mvc viewmodel并将变量设置为这样的值来解决这个问题。
self.Title = ko.observable(model.Title);
然后在我的淘汰视图模型中设置该值
{{1}}
但是当我输入'1'时,当失败的帖子返回时,它会用'“1”填充字段。
这不是一个表单太复杂,所以如果可以避免,我不想引入一些新的验证层。我不介意有一个验证的帖子。
谢谢,Dan
答案 0 :(得分:5)
我有什么问题。过去两周我一直在探讨这个话题。 (如果你愿意,可以查看我最近几天的问题)。我得出结论,数据注释和流畅验证不适用于使用淘汰不幸的客户端。因此,您必须引入另一层验证。
好消息是它经过了良好的测试,并且像淘汰赛一样标准。
您主要有三种选择:
我期待社区倾向于建议使用jQuery,但显然主流验证是淘汰赛的首选。它的行为与数据注释非常相似,但显然是在挖空视图模型字段中完成的。
希望这有帮助(不要拍摄信使:))
答案 1 :(得分:0)
我正在研究类似的情况,做一个混合的web api / MVC项目。只有细节页面从控制器接收任何数据。休息由淘汰赛处理。 选项我可以看到sofar(一些测试,一些合格的猜测):
1,2:使用knockout / jquery处理事件(当表单被认为有效时)。如果异步帖包含错误则返回并显示它们(某些css / less / sass框架,如bootstrap有准备好的alertbox类,例如将错误输入)。