Rad*_*ila 5 validation ajax client-side asp.net-mvc-2
我正在进行Ajax调用并将内容添加到MVC2应用程序内的表单中.我需要通过验证我的新内容来更新客户端验证元数据.
<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({"Fields":[{"
...
</script>
Run Code Online (Sandbox Code Playgroud)
有没有办法为局部视图生成此元数据?
提前致谢.
小智 6
我也在这上面撞墙几天,并且要沿着移除表格标签的路线走下去,但是如果你仍然感兴趣,那就让它以一种稍微不那么笨拙的方式工作.我的场景类似,因为我有一个表单,其中包含最初要验证的元素集合,但用户可以通过ajax动态添加新行.
我会把它分解,所以希望看到发生的事情会更容易.查看MVC源代码,表单和验证大致如下:
Html.BeginForm()输出开始表单标签,然后创建并返回一个新的MvcForm实例,除了使表单的范围更容易为您管理外,它不会向外做很多事情.但它会创建一个新的FormContext并将其存储在ViewContext.FormContext中.正是这个FormContext跟踪客户端验证.
Html.BeginForm()做的最后一件事是使用form标签的id设置新FormContext的FormId属性.这是必需的,因此客户端脚本可以匹配表单和验证规则.
Html.EndForm()配置MvcForm.此Dispose方法输出表单结束标记,然后调用ViewContext.OutputClientValidation(),它可用于输出javascript.最后,它删除当前的FormContext并将其设置回父FormContext,如果没有,则返回null.
因此,为了不输出表单标记,我们需要从MvcForm构造函数/析构函数中获取一些FormContext管理.
因此,在我的部分视图中,我执行了以下操作:
在顶部,我检查ViewContext.FormContext是否有值.如果是这样,我们处于初始负载,所以不需要乱七八糟.如果没有,它是一个ajax调用,所以我启用客户端验证,直接创建一个新的MvcForm(不使用BeginForm) - 这会导致创建一个FormContext - 并将FormContext.FormId设置为与我的父页面相同
在视图的最后,我检查是否有表单实例,如果有,请调用ViewContext.OutputClientValidation()并将ViewContext.FormContext重置为null.我没有Dispose()MvcForm,因为这将输出结束标记,而MvcForm不包含一次性对象.
视图的骨架看起来如此:
<%
MvcForm dummyForm = null;
if (this.ViewContext.FormContext == null)
{
Html.EnableClientValidation();
dummyForm = new MvcForm(this.ViewContext);
this.ViewContext.FormContext.FormId = "mainform";
}
%>
// standard partial view markup goes here
<%
if (dummyForm != null)
{
this.ViewContext.OutputClientValidation();
this.ViewContext.FormContext = null;
}
%>
Run Code Online (Sandbox Code Playgroud)
你可以很容易地把它包装成一个扩展方法
菲尔
终于开始工作了。
答案很简单:不要浪费时间使用 MicrosoftMvcValidation.js。它是用 Script# 生成的,这使得扩展变得困难。
切换到xVal和jQuery Validation。它不需要表单来生成客户端验证元数据。另外,为了加载 AJAX 请求的验证,您所要做的就是在获得新的 Html 后调用以下命令:
lForm.find("#placeholder").empty();
lForm.valid();
lForm.find("#placeholder").html(responseHtml);
Run Code Online (Sandbox Code Playgroud)
就可以了。首先,删除旧内容。然后重新运行验证以消除可能过时的验证错误。然后添加新内容。工作起来就像一个cham。
此外,jQuery 验证可以非常轻松地启用或禁用特定字段的验证(条件验证)。
| 归档时间: |
|
| 查看次数: |
5337 次 |
| 最近记录: |