Pregunta

vi un puesto similar que estaba tratando de hacer esto mismo con el ejemplo Cena, pero fijó su mina cuestión parece ser un poco más profundo. Básicamente CXAN obtener la validación de trabajar muy bien, pero sólo funciona en Firefox. En Internet Explorer 7 cuando se carga la página, inmediatamente aparece un cuadro de alerta con el siguiente mensaje: "Error: título del elemento no está en una forma" ... Es evidente que es en forma de aquí, si es necesario me pueden enviar el marcado que se vuelve realidad desde la fuente de vista para mostrar esto. ¿Alguna idea sobre lo que puedo hacer para solucionar este problema serían más apreciados!

Básicamente estoy tratando de asegurarse de que mi Newspost tiene un título y un cuerpo. Desde que lo tengo envuelto en el modelo de vista que estoy pensando IE doesnt bastante entender esto. Tal vez estoy equivocado.

Estoy utilizando XVal para mi validación. Estoy pasando un modelo de vista en como mi modelo. Mi modelo de vista es el siguiente:

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;
   }
}

Este es mi punto de vista:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVCApp.Models.ViewModels.News.NewsAdminViewData>" %>

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <% using (Html.BeginForm())
           {%>
        <div class="moduleContainer">
            <div class="moduleTitle">
                Create News Item
            </div>
            <div class="moduleContent">
                <div>
                    <div>
                        Title:</div>
                    <div>
                        <%= Html.TextBox("Title") %>
                    </div>
                </div>
                <div>
                    <div>
                        &nbsp;</div>
                    <div>
                        <%= Html.TextArea("Body") %>
                    </div>
                </div>
                <div>
                    <div>
                        News Group:
                    </div>
                    <div>
                        <%= Html.DropDownList("NewsGroup")%>
                    </div>
                </div>
                <div>
                    <div>
                        News Item:
                    </div>
                    <div>
                        <%= Html.DropDownList("NewsItem") %>
                    </div>
                </div>
            </div>
            <div class="moduleFooter">
                <%= Html.SubmitButton("btnSubmit", "Add News Post", null, "To add this news post click here.", "#ffd40f")%>
            </div>
        </div>
        <% } %>
        <%= Html.ClientSideValidation<NewsPost>()%>

Y por último mi post acción:

 [AcceptVerbs(HttpVerbs.Post)]
    public virtual ActionResult Create(/*FormCollection collection*/ NewsPost np)
    {
       NewsPost entity = this.reposNewsPost.New();
       try
       {
          entity.Title = np.Title; 
          entity.NewsPostGUID = System.Guid.NewGuid();
          entity.DateAdded = DateTime.Now;
          entity.DateUpdated = DateTime.Now;
          entity.Body = np.Body; 

          UpdateModel(entity);
          this.reposNewsPost.Insert(entity);
          this.reposNewsPost.SubmitChanges();
          return RedirectToAction("Index");
        }
        catch (RulesException ex)
        {
           ex.AddModelStateErrors(ModelState, "NewsPost");
           return ModelState.IsValid ? RedirectToAction(MVC.News.Actions.Create) 
                        : (ActionResult)View();
        }
     }
¿Fue útil?

Solución

Me encontré con el mismo problema que usted tiene. Honestamente, no parece que hizo el desorden como lo he hecho, pero tal vez le indicará cómo llegar a la solución.

Mine formulario de entrada con la validación del cliente XVal se carga dinámicamente (jquery ajax llamada) en la página. Por desgracia, pasé por alto que estaba poniendo el HTML devuelto en el elemento que ya tiene 'forma' entre los elementos de los padres. Debido a que era una petición ajax, elementos anidados 'forma' cuando está presente en la página, y el método XVal "_attachRuleToDOMElement" se implementa de esta manera:

 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");

La mía era parentForm.lengts 2!

veo que usted no ha anidado forma aquí seguro, pero quizás en la página principal hay algo? Podría ser que hace que Internet Explorer 7 y Firefox formas anidadas no lo hace. Además, me gustaría nombrar a los controles de entrada de manera diferente, aunque esto no debería ser el origen del problema:

<%= Html.TextBox("np.Title") %>...<%= Html.TextBox("np.Body") %> etc...

y luego me pondría elementPrefix también:

<%= Html.ClientSideValidation<NewsPost>("np")%>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top