【问题标题】:MVC validation lost in Knockoutjs postMVC 验证在 Knockoutjs 帖子中丢失
【发布时间】:2013-02-24 04:46:39
【问题描述】:

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

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

谢谢,丹

【问题讨论】:

  • 请在下面标记正确的回答。谢谢。

标签: asp.net-mvc-4 knockout.js validation asp.net-mvc-viewmodel


【解决方案1】:

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

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

你主要有三个选择:

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

希望这会有所帮助(不要向信使开枪 :))

【讨论】:

  • @DanDotNet 有帮助吗?谢谢
  • 仍然不确定什么响应是正确和有用的。请相应地标记一个。
【解决方案2】:

我目前正在研究类似的情况,正在做一个混合 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 Control Toolkits clientblock。我计划自己测试这个选项,看起来很有希望。
  2. 试试KnockoutMvc,这似乎也能帮上忙。

【讨论】:

  • 完全错过了原始帖子的年龄;)但是,如果它可以帮助某人,无论如何都要让这个raemain。
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 2011-10-17
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多