internal override void ProcessMainAttributes (IDictionary atts)
{
// note: the 'enableSessionState' configuration property is
// processed in a case-sensitive manner while the page-level
// attribute is processed case-insensitive
string enabless = GetString (atts, "EnableSessionState", null);
if (enabless != null) {
if (String.Compare (enabless, "readonly", true, Helpers.InvariantCulture) == 0)
enableSessionState = PagesEnableSessionState.ReadOnly;
else if (String.Compare (enabless, "true", true, Helpers.InvariantCulture) == 0)
enableSessionState = PagesEnableSessionState.True;
else if (String.Compare (enabless, "false", true, Helpers.InvariantCulture) == 0)
enableSessionState = PagesEnableSessionState.False;
else
ThrowParseException ("Invalid value for enableSessionState: " + enabless);
}
string value = GetString (atts, "CodePage", null);
if (value != null) {
if (responseEncoding != null)
ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive.");
if (!BaseParser.IsExpression (value)) {
int cpval = -1;
try {
cpval = (int) UInt32.Parse (value);
} catch {
ThrowParseException ("Invalid value for CodePage: " + value);
}
try {
Encoding.GetEncoding (cpval);
} catch {
ThrowParseException ("Unsupported codepage: " + value);
}
codepage = new MainDirectiveAttribute <int> (cpval, true);
} else
codepage = new MainDirectiveAttribute <int> (value);
}
value = GetString (atts, "ResponseEncoding", null);
if (value != null) {
if (codepage != null)
ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive.");
if (!BaseParser.IsExpression (value)) {
try {
Encoding.GetEncoding (value);
} catch {
ThrowParseException ("Unsupported encoding: " + value);
}
responseEncoding = new MainDirectiveAttribute <string> (value, true);
} else
responseEncoding = new MainDirectiveAttribute <string> (value);
}
contentType = GetString (atts, "ContentType", null);
value = GetString (atts, "LCID", null);
if (value != null) {
if (!BaseParser.IsExpression (value)) {
int parsedLcid = -1;
try {
parsedLcid = (int) UInt32.Parse (value);
} catch {
ThrowParseException ("Invalid value for LCID: " + value);
}
CultureInfo ci = null;
try {
ci = new CultureInfo (parsedLcid);
} catch {
ThrowParseException ("Unsupported LCID: " + value);
}
if (ci.IsNeutralCulture) {
string suggestedCulture = SuggestCulture (ci.Name);
string fmt = "LCID attribute must be set to a non-neutral Culture.";
if (suggestedCulture != null) {
ThrowParseException (fmt + " Please try one of these: " +
suggestedCulture);
} else {
ThrowParseException (fmt);
}
}
lcid = new MainDirectiveAttribute <int> (parsedLcid, true);
} else
lcid = new MainDirectiveAttribute <int> (value);
}
culture = GetString (atts, "Culture", null);
if (culture != null) {
if (lcid != null)
ThrowParseException ("Culture and LCID are mutually exclusive.");
CultureInfo ci = null;
try {
if (!culture.StartsWith ("auto"))
ci = new CultureInfo (culture);
} catch {
ThrowParseException ("Unsupported Culture: " + culture);
}
if (ci != null && ci.IsNeutralCulture) {
string suggestedCulture = SuggestCulture (culture);
string fmt = "Culture attribute must be set to a non-neutral Culture.";
if (suggestedCulture != null)
ThrowParseException (fmt +
" Please try one of these: " + suggestedCulture);
else
ThrowParseException (fmt);
}
}
uiculture = GetString (atts, "UICulture", null);
if (uiculture != null) {
CultureInfo ci = null;
try {
if (!uiculture.StartsWith ("auto"))
ci = new CultureInfo (uiculture);
} catch {
ThrowParseException ("Unsupported Culture: " + uiculture);
}
if (ci != null && ci.IsNeutralCulture) {
string suggestedCulture = SuggestCulture (uiculture);
string fmt = "UICulture attribute must be set to a non-neutral Culture.";
if (suggestedCulture != null)
ThrowParseException (fmt +
" Please try one of these: " + suggestedCulture);
else
ThrowParseException (fmt);
}
}
string tracestr = GetString (atts, "Trace", null);
if (tracestr != null) {
haveTrace = true;
atts ["Trace"] = tracestr;
trace = GetBool (atts, "Trace", false);
}
string tracemodes = GetString (atts, "TraceMode", null);
if (tracemodes != null) {
bool valid = true;
try {
tracemode = (TraceMode) Enum.Parse (typeof (TraceMode), tracemodes, false);
} catch {
valid = false;
}
if (!valid || tracemode == TraceMode.Default)
ThrowParseException ("The 'tracemode' attribute is case sensitive and must be " +
"one of the following values: SortByTime, SortByCategory.");
}
errorPage = GetString (atts, "ErrorPage", null);
validateRequest = GetBool (atts, "ValidateRequest", validateRequest);
value = GetString (atts, "ClientTarget", null);
if (value != null) {
if (!BaseParser.IsExpression (value)) {
value = value.Trim ();
ClientTargetSection sec = GetConfigSection <ClientTargetSection> ("system.web/clientTarget");
ClientTarget ct = null;
if ((ct = sec.ClientTargets [value]) == null)
value = value.ToLowerInvariant ();
if (ct == null && (ct = sec.ClientTargets [value]) == null) {
ThrowParseException (String.Format (
"ClientTarget '{0}' is an invalid alias. See the " +
"documentation for <clientTarget> config. section.",
clientTarget));
}
value = ct.UserAgent;
clientTarget = new MainDirectiveAttribute <string> (value, true);
} else
clientTarget = new MainDirectiveAttribute <string> (value);
}
notBuffer = !GetBool (atts, "Buffer", true);
async = GetBool (atts, "Async", false);
string asyncTimeoutVal = GetString (atts, "AsyncTimeout", null);
if (asyncTimeoutVal != null) {
try {
asyncTimeout = Int32.Parse (asyncTimeoutVal);
} catch (Exception) {
ThrowParseException ("AsyncTimeout must be an integer value");
}
}
value = GetString (atts, "MasterPageFile", masterPage != null ? masterPage.Value : null);
if (!String.IsNullOrEmpty (value)) {
if (!BaseParser.IsExpression (value)) {
value = System.Web.VirtualPathUtility.Combine(BaseVirtualDir, value);
if (!HostingEnvironment.VirtualPathProvider.FileExists (value))
ThrowParseFileNotFound (value);
AddDependency (value);
masterPage = new MainDirectiveAttribute <string> (value, true);
} else
masterPage = new MainDirectiveAttribute <string> (value);
}
value = GetString(atts, "Title", null);
if (value != null) {
if (!BaseParser.IsExpression (value))
title = new MainDirectiveAttribute <string> (value, true);
else
title = new MainDirectiveAttribute <string> (value);
}
value = GetString (atts, "Theme", theme != null ? theme.Value : null);
if (value != null) {
if (!BaseParser.IsExpression (value))
theme = new MainDirectiveAttribute <string> (value, true);
else
theme = new MainDirectiveAttribute <string> (value);
}
styleSheetTheme = GetString (atts, "StyleSheetTheme", styleSheetTheme);
enable_event_validation = GetBool (atts, "EnableEventValidation", enable_event_validation);
maintainScrollPositionOnPostBack = GetBool (atts, "MaintainScrollPositionOnPostBack", maintainScrollPositionOnPostBack);
if (atts.Contains ("EnableViewStateMac")) {
enableViewStateMac = GetBool (atts, "EnableViewStateMac", enableViewStateMac);
enableViewStateMacSet = true;
}
#if NET_4_0
value = GetString (atts, "MetaDescription", null);
if (value != null) {
if (!BaseParser.IsExpression (value))
metaDescription = new MainDirectiveAttribute <string> (value, true);
else
metaDescription = new MainDirectiveAttribute <string> (value);
}
value = GetString (atts, "MetaKeywords", null);
if (value != null) {
if (!BaseParser.IsExpression (value))
metaKeywords = new MainDirectiveAttribute <string> (value, true);
else
metaKeywords = new MainDirectiveAttribute <string> (value);
}
#endif
// Ignored by now
GetString (atts, "SmartNavigation", null);
base.ProcessMainAttributes (atts);
}