Как обработать событие кнопки главной страницы на странице содержимого? - PullRequest
7 голосов
/ 16 апреля 2011

Больше, чем вопрос и статья об одном и том же вопросе, но у меня есть еще пара связанных вопросов, и я надеялся получить несколько ответов.

  1. Я слышал о двух подходах кнайдите кнопку и добавьте обработчик или используйте интерфейс (проверьте оба подхода из здесь ). Какой из них вы предлагаете?

  2. Если вы могли бы проиллюстрироватьОпция «Интерфейс» с некоторым кодом и местом для классификации файла интерфейса, потому что он не читается на странице, когда я пытаюсь его унаследовать!

Ответы [ 2 ]

8 голосов
/ 16 апреля 2011

Второй подход лучше IMO.Первый вариант связывает страницу с конкретной главной страницей, и это нехорошо.

Все файлы размещены в одной папке.

IPageInterface.cs:

namespace CallFromMasterPage
{
    public interface IPageInterface
    {
        void DoSomeAction();
    }
}

Default.aspx.cs:

namespace CallFromMasterPage
{
    public partial class Default : System.Web.UI.Page, IPageInterface
    {
        public void DoSomeAction()
        {
            throw new NotImplementedException();
        }
    }
}

Site.Master.cs:

namespace CallFromMasterPage
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Button1_Click(object sender, EventArgs e)
        {
            IPageInterface pageInterface = Page as IPageInterface;
            if (pageInterface != null)
            {
                pageInterface.DoSomeAction();
            }
        }
    }
}

Существуют и другие подходы.Например, вы можете опубликовать событие через посредник событий .

0 голосов
/ 16 апреля 2011

См. Из моего Openion будет лучше, если вы будете использовать обработчики событий ... и даже с пользовательским делегатом ..

, как это

public delegate ReturnType MasterPageButtonHandler(CustomEventArgs ObjPriargs);
public event MasterPageButtonHandler MasterPagebuttonClick;
.
.
.
.
Button.click+=new EventHandler(Button1_Click);
.
.
.
protected void Button1_Click(Object sender,EventArgs e)
{
     if(MasterPagebuttonClick!=null)
     {
         CustomEventArgs ObjPriargs=new CustomEventArgs();
         ObjPriargs.Property1=SomeValu1;
         ObjPriargs.Property2=SomeValu2;
         MasterPagebuttonClick.Invoke(ObjPriargs);
     }
}
.
.
.
public class CustomEventArgs
{
      Public DataType Property1{get;set;}
      Public DataType Property2{get;set;}
      Public DataType Property3{get;set;}
}
.
.
.
//    Now in your aspx Page
MyMaster m=Page.Master as MyMaster;
m.MasterPagebuttonClick+=new MasterPageButtonHandler(MasterPageHandler_Click);
.
.
.
protected void MasterPageHandler_Click(CustomEventArgs ObjPriargs)
{
    //You code/////
}

, проходящим таким образомпредоставить некоторую гибкость, например, в случае, если в будущем вы захотите пропустить некоторую страницу с содержанием информационного тура при нажатии ... это легко возможно.

...