【问题标题】:Return to edit view after validation failed htm attributes验证失败 htm 属性后返回编辑视图
【发布时间】:2012-11-19 08:14:23
【问题描述】:

我有一个简单的视图,用于编辑一些基本信息。如果不需要数据,它们是“NA”复选框。

   @Html.TextBoxFor(m => m.PersonInfo[i].Reference, "Enter a reference", new { disabled = Model.PersonInfo[i].NotApplicable }) 

   @Html.CheckBoxFor(m => m.PersonInfo[i].NotApplicable, new
       {
           onclick = "ChangeEnabledState(" + i + ");"

       })

当用户单击 NA 复选框时,它会调用一个 javascript 函数来禁用该人的所有控件。

我对以下场景有疑问:

  1. 用户创建一个新的“人员信息”并将其设置为 NA(因此所有字段都被禁用)
  2. 然后用户返回编辑视图,取消选中复选框(启用视图)
  3. 用户在其中一个 texboxes 中输入了一些无效数据
  4. 用户点击保存,验证失败,错误被添加到模型中
  5. 由于被禁用的文本框是根据模型设置的,因此它们被禁用但复选框被选中。所以用户必须点击复选框两次才能重新启用它们。

是否有更新视图模型的干净方法,以便在上述情况下不会禁用字段。我已经尝试了一个 jquery 文档。准备检查复选框并启用/禁用,但觉得必须有一个更优雅的解决方案。

【问题讨论】:

    标签: jquery asp.net-mvc validation


    【解决方案1】:

    如果您使用 Ajax 表单,您有一个名为 AjaxOptions 的参数。对于 AjaxOptions,您可以定义 OnBegin、OnSucces、OnComplete、OnSucces、OnFailure。

    在这里,您可以传入一个 javascript 函数,该函数在请求开始或完成或验证失败时调用,就像您的问题一样。

    @using (Ajax.BeginForm("MethodName", "ControllerName", new AjaxOptions { OnFailure="EnableForm()" })
    

    【讨论】:

    • 不幸的是我没有使用 AjaxForms,只是标准的 html
    • 您可以简单地将 Html.BeginForm 更改为 Ajax.BeginForm 以开始为此视图使用 ajax 表单
    • 我之前没有真正使用过 Ajax 表单,如果服务器端验证失败,会调用 OnError 吗?
    • 我不知道 OnError 属性?我个人会选择 OnComplete。完整的参考可以在这里找到:msdn.microsoft.com/en-us/library/…
    • 我添加了以下内容.. @using (Ajax.BeginForm(new AjaxOptions { OnComplete = "OnComplete" })) 验证失败时它没有调用 oncomplee 方法,我需要导入吗什么?
    猜你喜欢
    • 2018-11-05
    • 2012-05-31
    • 1970-01-01
    • 2011-09-05
    • 2017-02-20
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多