2012-04-09 14 views
1

sollte Diese Validierung arbeiten, aber die Post Feuer vorbei rechts, wenn es keine ausgewählten Werte in der Dropdown-Liste. Wenn sie in eine andere nicht-partielle verschoben wird, funktioniert die Validierung gut. Kurzfassung.Warum bricht die Validierung bei Teilansichten ab?

Ansichtsmodell:

public class BuilderVM 
{ 
    [Display(Name = "Select A Task")] 
    [Required] 
    public int? TaskId { get; set; } 
    public GenericSelectList Tasks { get; set; } 
} 

geordneten Ansicht (die Teilansicht am Ende der Seite nach einem Post gemacht wird, wie Sie, dass die Teilansicht in div gerendert wird befehle, die Ajax-Optionen bemerkt haben. id="MoveOn"):

@{ 
ViewBag.Title = "Builder"; 
AjaxOptions ajaxOpts = new AjaxOptions 
{ 
    LoadingElementDuration = 2, 
    LoadingElementId = "removeChoice", 
    UpdateTargetId = "MoveOn" 
}; 
} 
<div id="removeChoice"> 
@using (Ajax.BeginForm("Selected", ajaxOpts)) 
{ 
<fieldset> 
    <div> 
    //Data For Submission (This data validates perfectly before post) 
    </div> 
    <p><input type="submit" value="Go" /></p> 
</fieldset> 
} 
</div> 
<div id="MoveOn"></div> 

Teilansicht (nach einem Beitrag von Elternansicht wiedergegeben):

@model namespace.BuilderVM 
@{ 
AjaxOptions ajaxOpts = new AjaxOptions 
    { 
    UpdateTargetId = "Entry", 
    LoadingElementDuration = 2, 
    LoadingElementId = "RemoveEntry" 
    }; 
} 

<div id="RemoveEntry"> 
<h2>Details</h2> 
@using (Ajax.BeginForm("Data", ajaxOpts)) 
{ 
@Html.ValidationSummary(true) 
<fieldset> 
<legend>Data</legend> 
<div> 
    <span class="label">@Html.LabelFor(model => model.TaskId)</span> 
    <span class="content"> 
    @Html.DropDownListFor(
     model => model.TaskId, 
     new SelectList(
      Model.Tasks.Values, 
      "Id", 
      "DisplayFields", 
      Model.Tasks.StartValue 
     ), 
     Model.Tasks.Message 
    ) 
    </span>@Html.ValidationMessageFor(model => model.TaskId) 
</div> 
<p><input type="submit" value="Add Work Completed Data" /></p> 
</fieldset> 
} 
</div> 
<div id="Entry"></div> 

Obwohl die Dropdown-Liste for an modell.TaskId gebunden ist, die mit [Required] gekennzeichnet ist, wenn auf die Schaltfläche post geklickt wird (input type="submit") und in der Dropdown-Liste kein Wert ausgewählt ist, wird der Post ausgeführt, statt die Validierungsnachricht anzuhalten und anzuhängen. Ich bin nicht sicher, was zu tun ist, um dies zu beheben, da es beim Kopieren in eine normale Ansicht einwandfrei funktioniert. Warum funktioniert die Teilansichtsprüfung nicht?

Antwort

3

Das Problem ist, dass der Validator nur am Anfang lädt (mit $ (document) .ready()). Was Sie tun können, ist der folgende (Einsatz in der Teilansicht):

<script> 
     $(function() { 
      $.validator.unobtrusive.parse('.Content'); 
     }); 
    </script> 

Aus den gegebenen Informationen, die ich nehme an, das ist Ihr Problem. Hoffe das hilft dir.

+0

Welche JavaScript-Dateien haben Sie in der Ansicht enthalten? Ich nehme an, Sie haben jQuery, jQuery-Validator, jQuery unaufdringlich Validator und andere (wie die AJAX diejenigen, etc.) –

+0

In der Tat, Ihre erste Antwort richtig war. Sie hatten jedoch einen Tippfehler, der es nicht funktionierte. Sobald ich den Tippfehler fing, funktionierte es gut. Sie haben '$ .validator.unobtrusive.parse ('# Inhalt');', jedoch sollte es 'gewesen sein ('.content')' als Inhalt eine Klasse ist und nicht eine ID. –

+0

Ah ok perfekt! Ich sah nicht so nah aus und nahm an, dass du dort einen Ausweis hast; gut gemacht! –

Verwandte Themen