e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
111 lines
3.8 KiB
C#
111 lines
3.8 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="ModelErrorMessage.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.ModelBinding;
|
|
|
|
/// <summary>
|
|
/// Displays the first model error for a given key from the page's model state
|
|
/// </summary>
|
|
[
|
|
ToolboxData("<{0}:ModelErrorMessage runat=\"server\" Key=\"ModelStateKey\"></{0}:ModelErrorMessage>"),
|
|
DefaultProperty("Key"),
|
|
ParseChildren(true),
|
|
PersistChildren(false)
|
|
]
|
|
public class ModelErrorMessage : Label {
|
|
[
|
|
Themeable(false),
|
|
WebCategory("Behavior"),
|
|
WebSysDescription(SR.ModelErrorMessage_ModelStateKey),
|
|
DefaultValue("")
|
|
]
|
|
public string ModelStateKey {
|
|
get {
|
|
object o = ViewState["ModelStateKey"];
|
|
return ((o == null) ? String.Empty : (string)o);
|
|
}
|
|
set {
|
|
ViewState["ModelStateKey"] = value;
|
|
}
|
|
}
|
|
|
|
[
|
|
DefaultValue(""),
|
|
IDReferenceProperty,
|
|
WebCategory("Behavior"),
|
|
WebSysDescription(SR.ModelErrorMessage_AssociatedControlID),
|
|
Themeable(false)
|
|
]
|
|
public override string AssociatedControlID {
|
|
get {
|
|
return base.AssociatedControlID;
|
|
}
|
|
set {
|
|
base.AssociatedControlID = value;
|
|
}
|
|
}
|
|
|
|
[
|
|
WebCategory("Behavior"),
|
|
Themeable(false),
|
|
DefaultValue(false),
|
|
WebSysDescription(SR.ModelErrorMessage_SetFocusOnError)
|
|
]
|
|
public bool SetFocusOnError {
|
|
get {
|
|
object o = ViewState["SetFocusOnError"];
|
|
return ((o == null) ? false : (bool)o);
|
|
}
|
|
set {
|
|
ViewState["SetFocusOnError"] = value;
|
|
}
|
|
}
|
|
|
|
[
|
|
Browsable(false),
|
|
EditorBrowsable(EditorBrowsableState.Never),
|
|
PersistenceMode(PersistenceMode.Attribute)
|
|
]
|
|
public override string Text {
|
|
// We don't want the Text property exposed to the developer as we're going to set it
|
|
// ourselves to the value from the model state. We don't want to store it in ViewState
|
|
// because we want it re-evaluated on every render anyway, so storing in ViewState is
|
|
// just overhead.
|
|
get;
|
|
set;
|
|
}
|
|
|
|
protected internal override void OnPreRender(EventArgs e) {
|
|
base.OnPreRender(e);
|
|
ModelState modelState;
|
|
if (Page != null && Page.ModelState.TryGetValue(ModelStateKey, out modelState)) {
|
|
ModelError error = modelState.Errors.FirstOrDefault(modelError => !String.IsNullOrEmpty(modelError.ErrorMessage));
|
|
if (error != null) {
|
|
Text = HttpUtility.HtmlEncode(error.ErrorMessage);
|
|
|
|
// Render the script to set focus if there is a model error for the specified key
|
|
if (SetFocusOnError) {
|
|
var validateId = AssociatedControlID;
|
|
if (!String.IsNullOrEmpty(validateId)) {
|
|
var control = FindControl(validateId);
|
|
if (control != null) {
|
|
validateId = control.ClientID;
|
|
}
|
|
|
|
Page.SetValidatorInvalidControlFocus(validateId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|