【问题标题】:jqGrid & MVC3 - Adding Model ValidationjqGrid & MVC3 - 添加模型验证
【发布时间】:2011-12-27 15:31:58
【问题描述】:

是否可以将模型验证添加到编辑或添加 jqgrid 表单?如果是这样,它会怎么做?我知道我可以为 jqGrid 表单上的每个字段创建自定义验证,但是如何将默认的 MVC3 验证集成到 jqGrid?

我一直在通过创建一个自定义按钮来在 jQuery 对话框上加载部分视图来做到这一点。但是,考虑到我可以通过 jqGrid get 方法直接获取所有行值(即使我会丢失部分视图模型验证),我不想再次调用控制器。

有什么提示吗?

【问题讨论】:

  • 我发现这个问题有用且有趣。是否存在答案或类似问题?谢了!
  • @Larry,不。到目前为止,我还没有看到任何答案或类似的问题。但是,使用局部视图并将其加载到 jquery 对话框中非常简单。如果你真的想使用默认对话框,可以查看comercial jqGrid。它与 asp.net mvc3 几乎完全集成。
  • 感谢阿德里亚诺!我已经在 jquery 对话框上使用 jqgrid。现在我需要添加/编辑记录,并且我有几个验证,包括对某些字段的自定义远程验证。请问您还有其他建议/提示吗?谢谢!
  • @Larry,我正在使用添加按钮来加载一个包含我所有字段和验证的 jquery 对话框。但那是因为我有只能在服务器端完成的验证,把它放在默认的 jqGrid 对话框上会很昂贵。但是,如果您只有客户端验证,我建议您使用 jqGrid 验证。如果您需要示例,我可以通过电子邮件发送给您。
  • THX 阿德里亚诺。不幸的是,我也有服务器端验证,所以我更喜欢在 jqgrid 之外维护我的创建/编辑视图,直到你的有趣问题没有答案。拜托,您能否将一段代码寄给我以覆盖 jqgrid 的默认添加操作并打开创建/编辑对话框?非常感谢!

标签: asp.net-mvc validation jqgrid


【解决方案1】:

虽然我不熟悉 jqGrid,但在从呈现局部视图的控制器操作中填充 jQuery 对话框时,我通常会做同样的事情。

您可以在呈现 jqGrid 视图时加载局部视图,而不是执行回调。然后只需填充所选行中的字段。这是一些需要考虑的示例代码,但未经测试。

您的网格视图:

@model List<Customer>

<!-- create jqGrid here -->

@Html.PartialView("CustomerForm",new Customer());

客户表单:

@model Customer

<div id="CustomerForm">
@using (Html.BeginForm("Save","Customer",...) )
{
   @Html.HiddenFor(m => m.CustomerId)
   <div class="control-group">
      @Html.LabelFor(m => m.CustomerName)
      <div class="controls">
          @Html.EditorFor(m => m.CustomerName)
          @Html.ValidationFor(m => m.CustomerName)
      </div>
  </div>
  <p><input type="submit" id="submit" value="Save" /></p>
}
</div>

<script type="text/javascript">
   var $cf = $('#CustomerForm');
   $cf.dialog({ autoOpen: false }); // see jquery ui docs for exact options


   $('#myGrid .edit, #myGrid .add').click(function() {
       $(this).closest('tr').find('input, select').each(function() {
           $('input[name='+this.name+'], select[name='+this.name+']',$cf).val($(this).val());
       });
       $cf.dialog('open');
   });
</script>

【讨论】:

    【解决方案2】:

    例子:

     $(document).ready(function () {
        $("#jqg").jqGrid({
          url: '@Url.Action("GetData")',
            datatype: "json",
            colNames: ['User name', 'Email'],
            colModel: [
            { name: 'UserName', index: 'UserName', width: 150, sortable: true, editable: true },
            { name: 'Email', index: 'Email', width: 150, sortable: true, editable: true, editrules:{email:true, required:false}}
            ],
            caption: "User List"
        });
    

    验证在这里editrules:{email:true, required:false}(所以,如果这个字段是空的,那没关系,但如果它包含无效的电子邮件检查失败)。

    jqGrid Wiki中的更多信息a和示例

    如果您想在不修改 JS 代码的情况下进行此检查,您可以使用来自 Trirand 的控件,它允许您在服务器端进行检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多