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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|