我正在使用 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();