2014-10-30 36 views

回答

0

不,它可以是一个很好的解决方案,以使用属性来设置和获取控制值(不包括专门为仅HtmlControls)。在使用Model View Presenter (MVP) pattern时,我多次使用它们。

这里是MVP图案

模型的一个示例:

public interface IPresentationModel 
{ 
    string AProperty { set; } 
    string ATextbox { get; set; } 
    event EventHandler SaveData; 
    event EventHandler LoadData; 
} 

视图,标记:

<form id="form1" runat="server"> 
    <div> 
     <span id="aSpan" runat="server"></span> 
     <input type="text" id="aTextbox" runat="server"/> 
     <asp:Button ID="ButtonSave" runat="server" Text="Save" OnClick="ButtonSave_Click" /> 
    </div> 
    </form> 

查看,代码隐藏

public partial class View : Page, IPresentationModel 
{ 
    private Presenter _presenter; 

    protected override void OnInitComplete(EventArgs e) 
    { 
     base.OnInitComplete(e); 
     _presenter = new Presenter(this); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      LoadData(this, e); 
     } 
    } 

    public string AProperty 
    { 
     set 
     { 
      aSpan.InnerHtml = value; 
     } 
    } 

    public string ATextbox 
    { 
     get 
     { 
      return aTextbox.Value; 
     } 
     set 
     { 
      aTextbox.Value = value; 
     } 
    } 

    public event EventHandler SaveData; 
    public event EventHandler LoadData; 

    protected void ButtonSave_Click(object sender, EventArgs e) 
    { 
     SaveData(this, e); 
     LoadData(this, e); 
    } 
} 

演示

public class Presenter 
{ 
    private readonly IPresentationModel _model; 
    private static string _fakeService = "42"; 

    public Presenter(IPresentationModel model) 
    { 
     _model = model; 
     _model.SaveData += SaveData; 
     _model.LoadData += LoadData; 
    } 

    private void LoadData(object sender, EventArgs e) 
    { 
     _model.AProperty = _fakeService; 
     _model.ATextbox = _fakeService; 
    } 

    private void SaveData(object sender, EventArgs e) 
    { 
     _fakeService = _model.ATextbox; 
    } 
}