在FormView的ItemInserted中,AffectedRows总是-1

时间:2013-09-18 15:30:38

标签: c# asp.net webforms model-binding asp.net-4.5

我有一个使用模型绑定的ASP.NET 4.5 Web表单应用程序。我按照本教程创建了一个业务逻辑层:http://www.asp.net/web-forms/tutorials/data-access/model-binding/adding-business-logic-layer

因此,FormView的InsertMethod位于相应的BLL类中。 BLL类在代码隐藏的OnCallingDataMethods方法中按照上面的示例定义。 然而,OnItemInserted方法,我直接在我的页面的代码隐藏类中定义,因为我觉得它不是每个说明的业务逻辑,而是前端类型逻辑,根据完成的插入给用户反馈。

我的问题是,无论Insert的结果如何,OnItemsInserted方法中的AffectedRows属性始终为-1。因此,我无法根据此MSDN示例验证插入是否成功:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.formview.iteminserted.aspx

使用ASP.Net 4.5 Web窗体模型绑定的新模型绑定技术时,Affect属性属性是否有缺陷或未填充在FormViewInsertedEventArgs集合中?或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

我的解决方案是上面提到的任何模型错误和DBUpdateException的业务层检查的组合,然后在FormView的ItemInserted事件中:

protected void personForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
    {
        if (this.ModelState.IsValid)
        {
            labResponse.Text = "New record added. Woohoo!";
        }
        else
        {
            labResponse.Text = "";
        }
        personForm.DefaultMode = FormViewMode.Insert;
    }

这似乎适用于我的应用程序,可以满足我的需求。似乎从我的测试中看,如果存在模型错误,它将永远不会到达此事件,因此可以安全地假设如果modelState有效且您已使用EF 5 +模型绑定到达OnInserted事件,您的记录已成功插入。

我们肯定希望在MSDN上看到更详细的例子,并在ASP Webforms中看到关于模型绑定的文档,因为目前的一系列教程至少可以说是非常难以理解的。