使用属性设置.Net HTML服务器控件的值

本文关键字:服务器控件 HTML Net 属性 设置 | 更新日期: 2023-09-27 18:28:28

在.Net HTML服务器控件上使用属性获取或设置字段有什么缺点吗?

HTML

<span id="aSpan" runat="server"></span>

C#

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

使用属性设置.Net HTML服务器控件的值

不,使用属性设置和获取控件值是一个很好的解决方案(并非仅针对HtmlControls)。在使用模型视图演示者(MVP)模式时,我已经多次以这种方式使用它们。

这里是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;
    }
}