0

我正在使用 DevExpress GridView 弹出编辑表单。在我的模型中,密码和确认密码字段是必需的。当用户编辑记录时,我使用下面给定的标记将控件标记为可见或不可见,因为管理员用户一旦创建用户就不允许更改密码,但我的 modelState 仍然无效并说即使它是在编辑模式下也需要密码无形的。

我正在使用 MVC 扩展 19.1

        Html.DevExpress().FormLayout(settings =>
        {
            var rlUserId = Convert.ToInt32(DataBinder.Eval(c.DataItem, "RLUserId"));
            settings.Name = "FormLayoutRLUsers";
            settings.Width = Unit.Percentage(100);
            settings.SettingsAdaptivity.AdaptivityMode = 
            FormLayoutAdaptivityMode.SingleColumnWindowLimit;
            settings.SettingsAdaptivity.SwitchToSingleColumnAtWindowInnerWidth = 700;
            settings.ColCount = 2;

            settings.Items.Add(i =>
            {
                i.FieldName = "LastName";
                i.NestedExtension().TextBox(tx =>
                {
                    AssignTextBoxSettings(tx);
                });
            });
            settings.Items.Add(i =>
            {
                i.FieldName = "FirstName";
                i.NestedExtension().TextBox(tx =>
                {
                    AssignTextBoxSettings(tx);
                });
            });               
           settings.Items.Add(i =>
            {
                i.FieldName = "Password";
                i.NestedExtension().TextBox(tx =>
                {
                    tx.Properties.Password = true;
                    if (rlUserId > 0)
                    {
                        i.Visible = false;
                        tx.ClientVisible = false;
                    }
                    else
                    {
                        i.Visible = true;
                        AssignTextBoxSettings(tx);
                        tx.ClientVisible = true;
                    }
                });
            });
            settings.Items.Add(i =>
            {
                i.FieldName = "ConfirmPassword";
                i.NestedExtension().TextBox(tx =>
                {
                    tx.Properties.Password = true;
                    if (rlUserId > 0)
                    {
                        i.Visible = false;
                        tx.ClientVisible = false;
                    }
                    else
                    {
                        i.Visible = true;
                        AssignTextBoxSettings(tx);
                        tx.ClientVisible = true;                       
                    }
                });
            });​                
            settings.Items.Add(i =>
            {
                i.ShowCaption = DefaultBoolean.False;
            }).SetNestedContent(() =>
            {
                ViewContext.Writer.Write("<div style='float:right'>");
                Html.DevExpress().Button(btnSettings =>
                {
                    btnSettings.Name = "btnUpdate";
                    btnSettings.Text = "Update";
                    btnSettings.ClientSideEvents.Click = "function(s, e){ gridView.UpdateEdit(); }";
                }).Render();
                Html.DevExpress().Button(btnSettings =>
                {
                    btnSettings.Name = "btnCancel";
                    btnSettings.Text = "Cancel";
                    btnSettings.Style[HtmlTextWriterStyle.MarginLeft] = "5px";
                    btnSettings.ClientSideEvents.Click = "function(s, e){ gridView.CancelEdit(); }";
                }).Render();
                ViewContext.Writer.Write("</div>");
            });
        }).Bind(ViewData["EditableUser"] ?? GetEditingUser(c.Grid))
        .Render();
4

1 回答 1

0

可以有很多解决方案,例如:

  1. 在检查模型状态之前,您可以删除像 ModelState.Remove("Password") 这样的字段。

  2. 您可以根据角色或基于页面用户来制作此密码字段。您可以发送/存储视图包中的值。

  3. 在更新时,您可以将密码字段设为只读或禁用。

devexpress 网站上已经提供了各种演示来阅读这种基本的东西。请在那里看看。

于 2019-11-26T07:53:48.723 回答