MVC3 Razor Partielles Rendern, nicht enthalten sind Daten - Validierungs-Attribute
Ich habe eine farily geradlinig form macht, dass persönliche Daten als Teilansicht in der Mitte der form. Ich bekomme keine client-seitige Validierung zu arbeiten, auf diese form.
Ich begann die Jagd nach dem generieren der html-und der kam mit der gleichen Modell-Feld gerendert auf einem standard-form und eine Teilansicht.
Bemerkte ich, dass die input-Elemente werden korrekt aufgefüllt, die auf den ersten Anruf, @html.teilweise werden die folgenden geschieht nur, wenn die partialview neu geladen wird über einen ajax-request.
Erst der Kopf meiner Teilansicht, dies ist innerhalb einer Ajax.BeginForm auf der Hauptseite.
@model MvcMPAPool.ViewModels.EventRegistration
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function ()
{
$(".phoneMask").mask("(999) 999-9999");
});
</script>
@{
var nPhn = 0;
var dTotal = 0.0D;
var ajaxOpts = new AjaxOptions{ HttpMethod="Post", UpdateTargetId="idRegistrationSummary", OnSuccess="PostOnSuccess" };
Html.EnableClientValidation( true );
Html.EnableUnobtrusiveJavaScript( true );
}
Hier ist die razor-markup-Code der partiellen view:
@Html.ValidationMessageFor(model=>Model.Player.Person.Addresses[0].PostalCode)
<table>
<tr>
<td style="width:200px;">City*</td>
<td>State</td>
<td>Zip/Postal Code</td>
</tr>
<tr>
<td>@Html.TextBoxFor(p=>Model.Player.Person.Addresses[0].CityName, new { style="width:200px;", maxlength=50 })</td>
<td>
@Html.DropDownListFor(p=> Model.Player.Person.Addresses[0].StateCode
, MPAUtils.GetStateList(Model.Player.Person.Addresses[0].StateCode))</td>
<td>
<div class="editor-field">
@Html.TextBoxFor(p=>Model.Player.Person.Addresses[0].PostalCode, new { style="width:80px;", maxlength=10 })
</div>
</td>
</tr>
</table>
Hier ist das gerenderte Feld aus der Teilansicht:
<td>
<div class="editor-field">
<input id="Player_Person_Addresses_0__PostalCode" maxlength="10" name="Player.Person.Addresses[0].PostalCode" style="width:80px;" type="text" value="" />
</div>
</td>
Hier ist das gleiche Modell, field gerendert, in einer standard-Ansicht:
<div class="editor-field">
<input data-val="true" data-val-length="The field Postal/Zip Code must be a string with a maximum length of 10." data-val-length-max="10" data-val-required="Postal or Zip code must be provided!" id="Person_Addresses_0__PostalCode" maxlength="10" name="Person.Addresses[0].PostalCode" title="Postal/Zip Code is required" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Person.Addresses[0].PostalCode" data-valmsg-replace="true"></span>
</div>
Beachten Sie, dass die partial-view-rendering no data-val-xxx-Attribute für das input-element.
Ist das richtig? Ich sehe nicht, wie die client-seitige Validierung konnte die Arbeit ohne diese Attribute, oder übersehe ich etwas grundlegendes hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ordnung zu erstellen, die unaufdringlich die Validierung von Attributen, eine
FormContext
muss vorhanden sein. Fügen Sie den folgenden an der Spitze Ihrer Teilansicht:@using Html.BeginForm()
oder@using Ajax.BeginForm()
deklariert, so gibt es keineFormContext
im PartialView. Wenn er aufgerufen wird, eine Ansicht, eine FormContext der an es übergeben wird. Wenn es heißt aus einer action im controller, keine FormContext übergeben wird. Haben Sie Arbeit, in diesem Fall, wird der PartialView instanziiert werden müssen die FormContext. Dies geschieht, indem Sie den code-block in meiner Antwort oben die PartialView.<input class="valid" aria-invalid="false" id="item_Code" name="item.Code" value="XX" type="text">
Vielleicht ist es jquery ORDENTLICHEN Validierung behindert mich.Wenn Sie möchten, dass die Validierung von Daten-tags, dort zu sein, Sie müssen in einem
FormContext
. Daher, wenn Sie dynamisch zu generieren Teile des Formulars, müssen Sie die folgende Zeile in Ihre Teilansicht:Müssen Sie dann sicherstellen, dass Sie dynamisch binden Ihre unaufdringliche Validierung jedes mal, wenn Sie Elemente hinzufügen/entfernen: