Frage

sah ich eine ähnliche Position, die diese gleiche Sache mit dem Abendessen Beispiel zu tun versuchte, aber er richtete seine Frage Mine ein wenig tiefer zu sein scheint. Grundsätzlich CXAN ich die Validierung an der Arbeit ganz gut, aber es funktioniert nur in Firefox. In IE7, wenn die Seite geladen wird, habe ich sofort eine Warnung mit der folgenden Meldung: „Fehler: Element Titel ist nicht in einer Form“ ... Natürlich ist es in Form hier, benötigte Wenn ich das Markup veröffentlichen kann, die tatsächlich wiedergegeben wird aus Sicht Quelle, dies zu zeigen. Alle Ideen, was ich tun kann, um dies zu beheben sein geschätzt!

Im Grunde versuche ich, nur um sicherzustellen, dass mein Newspost hat einen Titel und einen Körper. Da ich wickelte es in dem Ansichtsmodell up Ich denke IE dies ganz versteht doesnt. Vielleicht bin ich falsch.

Ich bin mit xVal für meine Validierung. Ich Leite ein Ansichtsmodell in wie mein Modell. Mein Ansichtsmodell sieht wie folgt aus:

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

Hier ist meine Ansicht:

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

Und schließlich mein Beitrag Aktion:

 [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();
        }
     }
War es hilfreich?

Lösung

Ich lief in das ähnliche Problem wie Sie. Ehrlich gesagt, ist es nicht so aussehen wie Sie das Chaos gemacht wie ich, aber vielleicht wird es Sie zur Lösung führen.

Mineneingabeformular mit xVal Client-Validierung wurde dynamisch (Jquery Ajax-Aufruf) in der Seite geladen. Leider übersehen, ich, dass ich das zurückgegebene HTML-Code in das Element wurde platzieren, die bereits ‚Form‘ zwischen Eltern Elemente. Denn es war ein Ajax-Request, verschachtelte ‚Form‘ Elemente, bei denen auf der Seite vorhanden, und xVal Methode „_attachRuleToDOMElement“ implementiert werden auf diese Weise:

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

war mein parentForm.lengts 2!

Ich sehe, dass Sie sicher nicht hier verschachtelte Form haben, aber vielleicht in Master-Seite gibt es etwas? Könnte sein, dass IE7 verschachtelte Formen und Firefox tut macht nicht. Außerdem würde ich die Eingangskontrollen anders nennen, obwohl dies nicht die Ursache des Problems sein sollte:

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

und dann würde ich elementPrefix gesetzt zu:

<%= Html.ClientSideValidation<NewsPost>("np")%>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top