Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Devexpress 如何验证ASPxGridView的editform模板中的控件?_Devexpress_Aspxgridview - Fatal编程技术网

Devexpress 如何验证ASPxGridView的editform模板中的控件?

Devexpress 如何验证ASPxGridView的editform模板中的控件?,devexpress,aspxgridview,Devexpress,Aspxgridview,我有一个ASPxGridView,里面有编辑表单模板和一些绑定控件。在我想要验证的更新之后,检查服务器端控件中的值。据我所知,这是不可能的。DevExpress建议订阅行更新事件,但这显然是错误的。他们所谓的支持是毫无用处的。 问题是,如果控件包含一些无效文本,并且在行更新之前很久在某个地方引发异常,那么它就会被devexpress吃掉。它返回给客户端的只是一些消息,比如“输入字符串的格式不正确”。 我想验证服务器端的输入控件。 是的,我也进行行验证,但这只对验证业务逻辑有用。 那么,如何验证服

我有一个ASPxGridView,里面有编辑表单模板和一些绑定控件。在我想要验证的更新之后,检查服务器端控件中的值。据我所知,这是不可能的。DevExpress建议订阅行更新事件,但这显然是错误的。他们所谓的支持是毫无用处的。 问题是,如果控件包含一些无效文本,并且在行更新之前很久在某个地方引发异常,那么它就会被devexpress吃掉。它返回给客户端的只是一些消息,比如“输入字符串的格式不正确”。 我想验证服务器端的输入控件。 是的,我也进行行验证,但这只对验证业务逻辑有用。
那么,如何验证服务器端EditForm模板中绑定的控件呢?

据我所知,这是不可能做到的。Devexpress控件留下了很多希望。无法检查验证是否成功。这显然是个大问题。 您可以使用ASPxEdit.AreEditorsValid()再次运行验证。但要做到这一点,您必须进行一点修改(devexpress始终如此)。 在编辑表单中放置一个容器,一个带有runat=“server”和ID的简单div就可以了。这是你的集装箱。 然后使用FindEditFormTemplate()获取他的div,并在ASPxEdit.AreDitorsValid()中使用它。 此解决方案有以下缺点:

  • 将aspx代码与不必要的元素混在一起
  • 服务器端的页面执行速度较慢
  • 浏览器端的页面呈现速度较慢
  • ValidateEditorsIncontainer()再次运行验证,因此存在一个大问题 演出命中率

以上所有内容都是DevExpress控件的商标。但是从好的方面来看。他们的网格有时需要五次不必要的服务器和数据库往返才能开始编辑。

您能澄清一下吗?您想在更新之后或实际上在将值分别写入数据库或每个控件之前验证这些值,因为在启动更新之前它会失去焦点?如果有必要进行服务器端验证,那么我建议按照DevExpress的建议,在行更新和行插入服务器端事件处理程序中进行验证。你为什么认为这是错误的?您可以在网格的更新和插入事件的e.NewValues集合中验证每个绑定控件的值。如果任何值未通过验证,则可以取消更新/插入操作。你能更详细地描述一下你想要的工作流程吗

之前的一张海报说有必要进行黑客攻击,在编辑表单模板中放置一个容器,但事实并非如此。您可以通过编辑表单模板中任何控件的.NamingContainer来使用编辑表单模板本身。将验证例程放入特定控件的服务器端验证事件处理程序中。 您可以将模板控件作为一个组进行评估:

EditFormValid = ASPxEdit
  .AreEditorsValid(myGrid.FindEditFormTemplateControl("myControl")
  .NamingContainer);
也可以在每个控件的验证例程期间更新类变量

public class foo
{
  bool EditFormValid = true;
  .
  .
  .
  void myControl_Validation(object sender, ValidationEventArgs e)
  {
    EditFormValid = EditFormValid && myControl.IsValid;
  }

  void myGrid_RowUpdating(object sender, ASPxDataUpdatingEventArgs e)
  {
    If(EditFormValid)
    {
      .
      .
      .
    }
    else e.Cancel = true;
  }
}
我发现DevExpress非常有效和灵活。然而,灵活性可能是一把双刃剑,因为有很多方法几乎可以在大部分时间内完成所有需要的事情,但通常只有一种方法可以在所有时间完成所有需要的事情。开发人员可以很容易地在一个实例中工作的基础上进行构建,但不一定是正确的/最佳实践,并且在继续构建项目的过程中,开发人员会陷入困境

如果你能提供更多细节,我也能