Asp.net mvc 使用xVal和ViewModel

Asp.net mvc 使用xVal和ViewModel,asp.net-mvc,validation,xval,Asp.net Mvc,Validation,Xval,我看到一篇类似的帖子,它试图用晚餐的例子做同样的事情,但他解决了他的问题,我的问题似乎更深了一点。基本上,我可以让验证正常工作,但它只在Firefox中工作。在IE7中,当页面加载时,我立即收到一个带有以下消息的警告框:“错误:元素标题不在表单中”。。。很明显,这是在这里的形式,如果需要,我可以发布从视图源实际呈现的标记来显示这一点。任何关于我能做什么来解决这个问题的想法都将不胜感激 基本上,我只是想确保我的新闻帖子有标题和正文。因为我已经把它包装在ViewModel中了,所以我想IE不太明白这

我看到一篇类似的帖子,它试图用晚餐的例子做同样的事情,但他解决了他的问题,我的问题似乎更深了一点。基本上,我可以让验证正常工作,但它只在Firefox中工作。在IE7中,当页面加载时,我立即收到一个带有以下消息的警告框:“错误:元素标题不在表单中”。。。很明显,这是在这里的形式,如果需要,我可以发布从视图源实际呈现的标记来显示这一点。任何关于我能做什么来解决这个问题的想法都将不胜感激

基本上,我只是想确保我的新闻帖子有标题和正文。因为我已经把它包装在ViewModel中了,所以我想IE不太明白这一点。也许我错了

我正在使用xVal进行验证。我正在传入一个ViewModel作为我的模型。我的ViewModel如下所示:

public class NewsAdminViewData : ViewModel
{
   public NewsPost NewsPost { get; set; }
   public List<SelectListItem> NewsItem { get; set; }
   public List<SelectListItem> NewsGroup { get; set; }

   public NewsAdminViewData(List<SelectListItem> newsItem, List<SelectListItem> newsGroup, NewsPost newsPost)
   {
      this.NewsItem = newsItem;
      this.NewsGroup = newsGroup;
      this.NewsPost = newsPost;
   }
}

我遇到了和你一样的问题。老实说,看起来你不像我那样把事情搞得一团糟,但也许这会指引你找到解决办法

带有xVal客户端验证的Mine输入表单被动态加载(jquery ajax调用)到页面中。不幸的是,我忽略了将返回的html放入父元素之间已经有“form”的元素中。因为这是一个ajax请求,所以页面上存在嵌套的“form”元素,xVal方法“\u AttachRuleToDomeElement”是这样实现的:

 var parentForm = element.parents("form");
        if (parentForm.length != 1)// <-- there can be only one parent form of course
            alert("Error: Element " + element.attr("id") + " is not in a form");
var parentForm=element.parents(“表单”);

如果(parentForm.length!=1)/我遇到了与您类似的问题。老实说,看起来你不像我那样把事情搞得一团糟,但也许这会指引你找到解决办法

带有xVal客户端验证的Mine输入表单被动态加载(jquery ajax调用)到页面中。不幸的是,我忽略了将返回的html放入父元素之间已经有“form”的元素中。因为这是一个ajax请求,所以页面上存在嵌套的“form”元素,xVal方法“\u AttachRuleToDomeElement”是这样实现的:

 var parentForm = element.parents("form");
        if (parentForm.length != 1)// <-- there can be only one parent form of course
            alert("Error: Element " + element.attr("id") + " is not in a form");
var parentForm=element.parents(“表单”);

如果(parentForm.length!=1)//Bump…有人有什么想法吗???这真的会影响问题吗?我不认为这是有效的。碰撞…有人有什么想法吗???这真的碰撞了问题吗?我不认为这是有效的。我不知道你到底做了什么来克服这个问题。。。你做了什么来解决这个问题?我重新安排了我的html,所以我没有嵌套的表单元素。parentForm.length现在是1,而不是2。但是,如果您有嵌套表单,这就是问题的原因,您应该设法找到避免它的方法。不仅仅是因为这个问题,而是因为根据W3C标准,这不是有效的html:因为我加上了前缀,它就工作了。它在IE中抱怨“title”不在表单中的原因是因为它在头部查看,而不是元素id的title值……不确定IE为什么这样做,但FF没有。但不管怎样前缀都起作用了。我不知道你到底做了什么来克服这个问题。。。你做了什么来解决这个问题?我重新安排了我的html,所以我没有嵌套的表单元素。parentForm.length现在是1,而不是2。但是,如果您有嵌套表单,这就是问题的原因,您应该设法找到避免它的方法。不仅仅是因为这个问题,而是因为根据W3C标准,这不是有效的html:因为我加上了前缀,它就工作了。它在IE中抱怨“title”不在表单中的原因是因为它在头部查看,而不是元素id的title值……不确定IE为什么这样做,但FF没有。但不管怎样,前缀都有效。
 var parentForm = element.parents("form");
        if (parentForm.length != 1)// <-- there can be only one parent form of course
            alert("Error: Element " + element.attr("id") + " is not in a form");
<%= Html.TextBox("np.Title") %>...<%= Html.TextBox("np.Body") %> etc...
<%= Html.ClientSideValidation<NewsPost>("np")%>