Обновить asp: ярлык на другой странице? - PullRequest
1 голос
/ 24 ноября 2011

Я работаю с сайтом asp.net, используя C # в фоновом режиме. Я хотел бы иметь возможность обновить ярлык asp: на странице, скажем, Page1.aspx . Я хочу, чтобы это было обновлено в зависимости от результата функции в классе (.cs) в другой папке. Это может быть позади.cs .

behind.cs

*some other code is here*
bool correct = false;
try
{
    if (_myConn.State == ConnectionState.Closed)
    {
        _myConn.Open();
        myCommand.ExecuteNonQuery();
    }
    if (Convert.ToInt32(myCommand.Parameters["@SQLVAR"].Value) < 1)
    {
        "Invalid Login" // I want to be the text of lblMessage.Text
    }
    else
    {
        correct = true;                 
    }
    _myConn.Close();
}
catch (Exception ex)
{
    "Error connecting to the database" // I want to be the text of lblMessage.Text
}
return correct;

page1.aspx

<asp:label runat="server" ID="lblMessage" cssClass="error"></asp:label>

Как я могу обновить метку asp: на page1.aspx * из ** behind.cs ??

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Вы не можете напрямую получить доступ к метке из другого класса. Вы можете написать функцию TryLogin с параметром out с сообщением об ошибке.

В Page1.cs

protected void BtnLogin_Clicked(object s, EventArgs e)
{
    string errMess;
    if(!Behind.TryLogin(out errMess)
       lblMessage.Text = errMess;
}

In позади.cs

public static bool TryLogin(out string errMess)
{
  *some other code is here*
  errMess = null;
  bool correct = false;
  try
  {
    if (_myConn.State == ConnectionState.Closed)
    {
        _myConn.Open();
        myCommand.ExecuteNonQuery();
    }
    if (Convert.ToInt32(myCommand.Parameters["@SQLVAR"].Value) < 1)
    {
        errMess = "Invalid Login" // I want to be the text of lblMessage.Text
    }
    else
    {
        correct = true;                 
    }
    _myConn.Close();
  }
  catch (Exception ex)
  {
    errMess = "Error connecting to the database" // I want to be the text of lblMessage.Text
  }
  return correct;
}
1 голос
/ 24 ноября 2011

Нет простого способа получить доступ к элементу page1.lblMessage из кода в behind.cs. Есть два способа справиться с этим:

  • Для обычных данных вернуть string из кода в behind.cs, который вызывающая функция в page1 присваивает lblMessage.
  • Для исключительных событий (например, неверный логин в вашем примере) выведите исключение в ваш код. В коде, вызывающем метод behind.cs, перехватите исключение и присвойте текст lblMessage.

В вашем коде вы должны добавить следующее в ваш блок catch:

throw new MyException("Error connection to the database", e);

Сначала вам нужно будет создать MyException класс. Затем в коде вызова наберите catch(MyException) и отобразите текст. Вы также можете обработать событие Page.Error, если хотите обработать все исключения в одном месте кода страницы. Параметр e для конструктора MyException подразумевает предоставление базового исключения как InnerException. При отладке всегда полезно сохранять оригинальное, технически информативное исключение.

...