如何获得web表单的引用';的ModelStateDictionary

本文关键字:ModelStateDictionary 引用 web 表单 何获得 | 更新日期: 2023-09-27 18:28:22

在ASP.NET 4.5 Web Forms应用程序中使用Web Forms MVP框架,如何从页面的Presenter对象内部获取对该页面的ModelStateDictionary对象的引用?

我希望我的演示者能够在出现问题时设置模型状态错误。例如:试图插入违反UNIQUE约束的记录时出错。

try
{
    dbcontext.SaveChanges();
}
catch (DbUpdateException updateException)
{
    // how to get a reference to the model state?
    ModelStateDictionary state = null;
    // add the error to the model state for display by the view
    state.AddModelError("key", updateException.GetBaseException().Message);
}

在谷歌上搜索"webformsmvp演示者modelstatedictionary",得到的相关结果数量低得惊人。

如何获得web表单的引用';的ModelStateDictionary

一种方法是将视图中的模型状态作为事件参数传递给演示者。

首先,EventArgs类:

public class ModelStateEventArgs : EventArgs
{
    public ModelStateEventArgs(ModelStateDictionary modelState)
    {
        this.ModelState = modelState;
    }
    public ModelStateDictionary ModelState { get; private set; }
}

如果您需要额外的事件参数,则从该类派生


然后,由视图实现的IView

public interface IDataContextView : IView<DataContextVM>
{
    event EventHandler<ModelStateEventArgs> Update;
}

在视图中提出事件本身:

  • MvpPage查看

    this.Update(this, new ModelStateEventArgs(this.ModelState));
    
  • MvpUserControl查看

    this.Update(this, new ModelStateEventArgs(this.Page.ModelState));
    

最后,Presenter,它可以订阅Update事件,并在事件发生时获得每个事件的模型状态:

public class DataContextPresenter : Presenter<IDataContextView>
{
    public DataContextPresenter(IDataContextView view)
        : base(view)
    {
        this.View.Update += OnUpdating();
    }
    private void OnUpdating(object sender, ModelStateEventArgs e)
    {
        var entity = ConvertViewModelToEntity(this.View.Model);
        dbcontext.Entry(entity).State = EntityState.Modified;
        try
        {
            dbcontext.SaveChanges();
        }
        catch (DbUpdateException updateException)
        {
            // add the error to the model state for display by the view
            e.ModelState.AddModelError(string.Empty, updateException.GetBaseException().Message);
        }
    }
}
相关文章:
  • 没有找到相关文章