如何获得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",得到的相关结果数量低得惊人。
一种方法是将视图中的模型状态作为事件参数传递给演示者。
首先,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);
}
}
}