Question

J'ai vu un poste similaire qui essayait de faire la même chose avec l'exemple du dîner, mais il a fixé sa mine d'émission semble être un peu plus profond. Fondamentalement, je CXAN obtenir la validation de travailler très bien, mais il ne fonctionne que dans Firefox. Dans IE7 lorsque la page se charge, je reçois immédiatement un message d'alerte avec le message suivant: « Erreur: titre d'élément est pas sous une forme » ... De toute évidence, il est en forme ici, si besoin je peux poster le balisage qui est effectivement rendu de la source de vue de montrer. Toutes les idées sur ce que je peux faire pour résoudre ce problème serait le plus apprécié!

En fait, je suis juste essayer de faire que mon Newspost a un titre et un corps. Depuis que je l'ai enveloppé dans le ViewModel je pense IE doesnt comprendre tout à fait cela. Peut-être que je me trompe.

J'utilise xVal pour ma validation. Je passe un ViewModel dans mon modèle. Mon ViewModel ressemble à ceci:

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

Voici mon point de vue:

<%@ 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>()%>

Et enfin mon action post:

 [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();
        }
     }
Était-ce utile?

La solution

Je suis tombé sur le même problème que vous avez. Honnêtement, il ne ressemble pas à vous fait le désordre comme moi, mais peut-être il vous dirigera vers la solution.

mine sous forme d'entrée de validation du client xVal a été chargé dynamiquement (jquery appel Ajax) dans la page. Malheureusement, je perdre de vue que je plaçais le code html retourné dans l'élément qui a déjà « forme » entre les éléments des parents. Parce qu'il était une demande ajax, imbriqués les éléments « forme » lorsqu'ils sont présents sur la page, et la méthode xVal « _attachRuleToDOMElement » est mis en œuvre ainsi:

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

mine parentForm.lengts était 2!

Je vois que vous n'avez pas emboîtées ici pour vous, mais peut-être à la page principale il y a quelque chose? Peut-être que IE7 rend les formes imbriquées et Firefox ne fonctionne pas. De plus, je nommerais les contrôles d'entrée différemment, bien que cela ne devrait pas être la source du problème:

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

et puis je mettrais elementPrefix aussi:

<%= Html.ClientSideValidation<NewsPost>("np")%>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top