4

Ich habe eine MVC3-Ansicht, die es dem Benutzer ermöglicht, ein paar verschiedene Dinge zu erstellen. Innerhalb der übergeordneten Formulare anzuzeigen, dies zu tun werden über jQuery UI Tabs aufgeteilt wie folgt aus:Warum wird meine Gültigkeitsprüfung vor dem Post in MVC3 auf die Abrufanforderung ausgelöst?

<div id="tabs"> 
     <ul> 
      <li><a href="#tabs-1">New Thing 1</a></li> 
      <li><a href="#tabs-2">Different New Thing</a></li> 
     </ul> 
    <div id="tabs-1">@Html.Action("CreateNewThing", "NewThingController")</div> 
    <div id="tabs-2">@Html.Action("CreateDifferentThing", "DifferentThing")</div> 
    <div></div> 
</div> 

<script type="text/javascript"> 
    $(function() { 
     $("#tabs").tabs(); 
    }); 
</script> 

in der Teilansicht habe ich:

@model NewThingViewModel 

    @using (Html.BeginForm("CreateNewThing", "NewThingController", FormMethod.Post, new { id = "frmCreateNewThing" })) 
    { 
    ... 

mit Eingabefeldern, einem Submit-Button, usw. Das scheint gut zu funktionieren: es macht alles und posten gut für die richtige Controller-Methode.

Allerdings bin ich jetzt Verdrahtung in der Validierung und ich habe ein Problem.

In der Steuerung machen es die Ansicht, wie so:

public ActionResult CreateNewThing(NewThingViewModel model) 
{ 

... initializing model fields, drop downs etc. 

    return PartialView("CreateNewThing", model); 
} 

ich eine separate post-Methode wie so haben:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult CreateNewThing(NewThingViewModel newThingViewModel, FormCollection collection) 
{ 
     ..... 
} 

Probe Modell:

public class NewThingViewModel 
    { 
     [Required] 
     [StringLength(50)] 
     [Display(Name = "Display Name:")] 
     public string DisplayName { get; set; }  
    } 

Die Problem ist, wenn die Seite zuerst die Felder auflistet, die als [Erforderlich] durch DataAnnotations in th gekennzeichnet sind Das Modell wird rot angezeigt und die Validierungszusammenfassung zeigt an, dass sie ungültig sind, wenn die Seite anfänglich angezeigt wird. I.E. Es verhält sich so, als ob es bereits gepostet wurde, bevor der Benutzer etwas beim ersten Laden eingeben oder alles in die Textfelder schreiben kann.

Ich weiß, die erste nicht-Post CreateNewThing wird ausgelöst, weil ich es im Debugger abfangen kann und ich kenne die zweite nicht auf die anfängliche Belastung.

Was würde meine Validierungen auf dem Get auslösen?

Ist es aufgrund der Art, wie Html.Action funktioniert und der Tatsache, dass ich partielle Ansichten auf eine andere Ansicht rendere?

Ich verwende UnobtrusiveJavaScriptEnabled und ClientValidationEnabled = True in web.config.

Ich kann niemanden finden, der auf dieses spezielle Problem gestoßen ist. Jedes andere Beispiel scheint zu funktionieren, dann finde ich kein Beispiel mehr, in dem die Ansicht in drei Teiltafeln unterteilt ist, die in jquery ui tabs enthalten sind.

Wie behebe ich das?
Optionen: Muss ich die Model.IsValid als Workaround manuell bearbeiten? Verwenden Sie einen anderen Mechanismus, um die Teilansichten auf der übergeordneten Ansicht anstelle von Html.Action zu rendern? Verwenden Sie etwas Javascript/Jquery, um die Validierung zu erfassen und zu stoppen?

+0

Was ich sehen würde, ist, ob die Fehler vom Server kommen oder ob die clientseitige Validierung eintritt. – Aliostad

Antwort

2

Sie haben keine Methodenparameter für Ihre GET-Controlleraktion.Sie können ein leeres Modell initialisieren und an die Ansicht übergeben, aber Sie müssen kein Modell an die Methode übergeben.

+0

Das hat den Trick gemacht! Ich habe das Modell aus den Parametern genommen und stattdessen in der Methode initialisiert. Danke! –

+0

Froh, es hat funktioniert! – Jon

1

Sie sind in einem „leeren“ Modell zu übergeben (was ich davon ausgehen, Standardwerte festgelegt für Ihre erforderlichen Eigenschaften hat), wenn Sie sollte in null vorbei sein.

Verwandte Themen