MVC 3 Razor @Html.ValidationMessageFor nicht teilweise laden per jquery.load()

Ich haben zusammen ein kleines Beispiel hier nur das problem zu replizieren.
Ich habe eine stark typisierte Teilansicht _Name.cshtml:

@model ValidationInPartial.ViewModels.MyViewModel

<h2>@ViewBag.Message</h2>

    <fieldset>
        <legend>Name</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.MyName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MyName)
            @Html.ValidationMessageFor(model => model.MyName)
        </div>

        <a href="#" id="reload">Reload Name</a>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<script type="text/javascript">
    $(document).ready(function () {
        $("#reload").click(function () {
            $("#divName").load("Home/NameReload");
        });
    });
</script>

zunächst geladen und angezeigt werden innerhalb der main-Index.cshtml

<div id="divForm">
    @using (Html.BeginForm()) {

        <div id="divName">
            @Html.Partial("_Name")
        </div>
    }
</div>

Feld MyName erforderlich ist und die Validierung erfolgt über die Required-Attribut in MyViewModel

namespace ValidationInPartial.ViewModels
{
    public class MyViewModel
    {
        [Required(ErrorMessage = "Please enter a Name.")]
        public string MyName { get; set; }
    }
}

Nachdem die Seite geladen ist das erste mal, wenn Sie klicken Sie auf die Schaltfläche "Erstellen" verlassen Sie das Feld leer, wird die Validierung der Meldung "Bitte einen Namen eingeben." zeigt neben dem Feld und das Feld selbst verwandelt sich rosa, das ist das erwartete Verhalten.
Jetzt durch Klick auf den "Reload-Name" link, das macht einen ajax-call (jquery.load(...)), die teilweise neu geladen wird, ist hier-controller-code:

public PartialViewResult NameReload()
{
    MyViewModel myViewModel = new MyViewModel();
    ViewBag.Message = "Name Reloaded";
    return PartialView("_Name", myViewModel);
}

Dieser Zeit, wenn Sie auf die Schaltfläche Erstellen klicken, verlassen Sie das Feld leer, wird die Validierung der Nachricht nicht angezeigt wird neben dem Feld, auch wenn das Thema dreht sich rosa.
Es stellt sich heraus, dass beim erneuten öffnen der teilweisen @Html.ValidationMessageFor nicht Rendern der prüfungsmeldung als das erste mal.

Hier ist die jquery-Dateien, die ich benutze

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

Frage ich mich, ob das ein bug in der Art und Weise der Razor-engine rendert die @Html.ValidationMessageFor oder ist das ein problem mit jquery?
Irgendeine Idee warum dies passiert?

Ich habe auch irgendwo gelesen, dass der ajax-Aufruf, verliert alle Skripte für die Seite, in der Tat habe ich um alle javascript-code innerhalb der teilweise so, dass Sie gerendert werden können und wieder verwendet.

In der Zwischenzeit fand ich ein workaround, das ist manuell zu Rendern, in der teilweise, was angeblich erbracht @Html.ValidationMessageFor:

<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="MyName"></span>

Jedoch diese Problemumgehung bedeutet, dass, wenn wir ändern die Art der überprüfung oder auch nur die Validierung Nachricht in das Required-Attribut in das ViewModel, das müssen wir ändern diese hard-coded Stück html in der Ansicht.

InformationsquelleAutor der Frage Roberto D | 2011-06-24

Schreibe einen Kommentar