==
является -оператором , а equals()
является методом .
Операторы обычно используются для примитива и, следовательно, ==
используется для сравнения адресов памяти, а метод equals()
используется для сравнения объектов .
mmilic, следуя за Вашим ответом на мою предыдущую идею..
Никакая дополнительная логика не требуется! В этом суть, Ваше выполнение ничего к рассматриваемым классам, просто перенеся их в некоторую пузырчатую упаковку инстанцирования!:)
Хорошо, я шел в просто пункт маркированного списка, но я хотел видеть эту работу для меня, таким образом, я починил некоторый очень грубый код, но понятие там, и это, кажется, работает.
ИЗВИНЕНИЯ ЗА ДЛИННОЕ СООБЩЕНИЕ
Это в основном будет "пузырем", который я упомянул.. Это получит средства управления HTML, фиксируя любые ошибки, которые происходят во время Рендеринга.
public class SafeLoader
{
public static string LoadControl(Control ctl)
{
// In terms of what we could do here, its down
// to you, I will just return some basic HTML saying
// I screwed up.
try
{
// Get the Controls HTML (which may throw)
// And store it in our own writer away from the
// actual Live page.
StringWriter writer = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
ctl.RenderControl(htmlWriter);
return writer.GetStringBuilder().ToString();
}
catch (Exception)
{
string ctlType = ctl.GetType().Name;
return "<span style=\"color: red; font-weight:bold; font-size: smaller;\">" +
"Rob + Controls = FAIL (" +
ctlType + " rendering failed) Sad face :(</span>";
}
}
}
Хорошо я просто дразнил вместе два средств управления здесь, каждый бросит другой, представит спам. Укажите здесь, я не даю дерьма. Они будут заменены Вашими пользовательскими элементами управления..
public class BadControl : WebControl
{
protected override void Render(HtmlTextWriter writer)
{
throw new ApplicationException("Rob can't program controls");
}
}
public class GoodControl : WebControl
{
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<b>Holy crap this control works</b>");
}
}
Хорошо, поэтому позволяет взгляду на "тестовую" страницу.. Здесь я просто инстанцирую средств управления, захватываю их HTML и произвожу его, я буду следовать с мыслями о поддержке разработчика и т.д.
protected void Page_Load(object sender, EventArgs e)
{
// Create some controls (BadControl will throw)
string goodHtml = SafeLoader.LoadControl(new BadControl());
Response.Write(goodHtml);
string badHtml = SafeLoader.LoadControl(new GoodControl());
Response.Write(badHtml);
}
Хорошо, я знаю то, что Вы думаете, "эти средства управления инстанцируют программно, что относительно поддержки разработчика? Я провел долбаные часы, получая эти средства управления, хорошие для разработчика, теперь Вы смешиваете с моим заклинанием".
Хорошо, таким образом, я еще действительно не протестировал это (вероятно, сделает в минуту!), но идея здесь состоит в том, чтобы переопределить метод CreateChildControls для страницы и взять экземпляр каждого управления, прибавил форму и выполнил его через SafeLoader. Если код передает, можно добавить его к набору Средств управления как нормальный, в противном случае затем можно создать ошибочные литералы или что-то до Вас мой друг.
Снова, жаль о длинном сообщении, но я хотел получить код здесь, таким образом, мы можем обсудить это :) Я надеюсь, что это помогает продемонстрировать мою идею :)
Протестированный путем отказывания от управления на разработчике и переопределения метода CreateChildControls с этим, хорошо работает, возможно, нуждается в некоторой уборке для создания вещей лучше выглядящими, но я оставлю это Вам ;)
protected override void CreateChildControls()
{
// Pass each control through the Loader to check
// its not lame
foreach (Control ctl in Controls)
{
string s = SafeLoader.LoadControl(ctl);
// If its bad, smack it downnnn!
if (s == string.Empty)
{
ctl.Visible = false; // Prevent Rendering
string ctlType = ctl.GetType().Name;
Response.Write("<b>Problem Occurred Rendering " +
ctlType + " '" + ctl.ID + "'.</b>");
}
}
}
Приятного отдыха!
Это - интересная проблема.. Я все еще довольно нов когда дело доходит до пользовательских элементов управления и т.д., но здесь являюсь своими мыслями (не стесняйтесь комментировать/исправлять людей!).. (Я - вид взглядов/записи вслух здесь!)
Просто мои мысли, пламя далеко! :D ;)
В зависимости от того, где происходят Ваши ошибки, можно сделать что-то как...
public abstract class SilentErrorControl : UserControl
{
protected override void Render( HtmlTextWriter writer )
{
//call the base's render method, but with a try catch
try { base.Render( writer ); }
catch ( Exception ex ) { /*do nothing*/ }
}
}
Затем наследуйте SilentErrorControl вместо UserControl.
Global.asax и Application_Error?
http://www.15seconds.com/issue/030102.htm
Или Событие Page_Error на человеке Page только:
http://support.microsoft.com/kb/306355
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}
public void Page_Error(object sender,EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "<b>Error Caught in Page_Error event</b><hr><br>" +
"<br><b>Error in: </b>" + Request.Url.ToString() +
"<br><b>Error Message: </b>" + objErr.Message.ToString()+
"<br><b>Stack Trace:</b><br>" +
objErr.StackTrace.ToString();
Response.Write(err.ToString());
Server.ClearError();
}
Кроме того, Karl Seguin (Привет Karl!) имел Сообщение при использовании HttpHandler вместо этого:
http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx
(Не уверенный, что разрешение воспроизвести его, но если Вы хотите описать ответ, Вы получили мой Upvote ☺),
Как насчет того, чтобы добавить новый подкласс UserControl, что ошибочные дескрипторы его методы рендеринга и загрузки (так, чтобы они скрылись, как Вы желаете), и затем наследовавшийся этому для Ваших пользовательских элементов управления?
Я не уверен, что понимаю Ваш ответ.. Как Вы загружаете свои средства управления и добавляете их к Вашему набору средств управления?
Это было самым главным бита, добавленного в разделе "Update".. У Вас есть гибкость для использования SafeLoader везде, где Вам нравится.
Я не уверен, почему Вы чувствуете, что у Вас нет доступа/управления по HTML? Цель SafeLoader состоит в том, что Вы не заботитесь, каков HTML, Вы просто пытаетесь "произвести" управление (в "пузыре") и определить, загружается ли это хорошо в его текущем состоянии.
Если это делает (т.е. HTML возвращается), затем, можно сделать то, что Вы любите с ним, производите HTML, добавьте управление к набору средств управления, безотносительно!
В противном случае с другой стороны можно сделать то, что Вы любите, представляете сообщение об ошибке, выдаете пользовательское исключение.. Выбор является Вашим!
Я надеюсь, что это помогает разъяснить вещи для Вас, в противном случае затем, кричите :)