Ich habe ein sehr merkwürdiges Problem mit der unaufdringlichen Validierung.
Ich habe ein Modell mit einem Required-Attribut auf drei stirng Eigenschaften. Ich verwende TextBoxFor für zwei der Felder und TextAreaFor für das letzte. Die Validierung funktioniert auf der TextArea, aber nicht auf die Eingabefelder. Wenn ich mir den Quellcode ansehe, kann ich sehen, dass die Attribute, die die Überprüfung hinzufügt, nicht auf die Eingaben, sondern auf das Textfeld angewendet werden. Darüber hinaus, wenn ich Daten in das Textfeld eingeben und senden, es Beiträge und MVC-Modellbindung korrekt ModelState.IsValid auf false festgelegt und die ValidationSummary zeigt die Felder.
Was würde dazu führen, dass die Validierung bei den Eingabeelementen nicht funktioniert?
Modell:
public class TestModel : IEmail {
public string BCCAddresses {
get;
set;
}
[Required]
public string BodyFormat {
get;
set;
}
public string CCAddresses {
get;
set;
}
[Required]
public string FromAddress {
get;
set;
}
[Required]
public string SubjectLineFormat {
get;
set;
}
}
Ansicht:
@section head {
<script src="@Url.Content( "~/Scripts/jquery.1.7.1.min.js" )" type="text/javascript"></script>
<script src="@Url.Content( "~/Scripts/jquery.validate.min.js" )" type="text/javascript"></script>
<script src="@Url.Content( "~/Scripts/jquery.validate.unobtrusive.min.js" )" type="text/javascript"></script>
}
@{
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
}
@using ( Html.BeginForm( "Edit", "Email", FormMethod.Post ) ) {
<table>
<tr>
<td>From</td>
<td>@Html.TextBoxFor( x => x.FromAddress, new { style = "width: 500px;" } )</td>
</tr>
<tr>
<td>CC</td>
<td>@Html.TextBoxFor( x => x.CCAddresses, new { style = "width: 500px;" } )</td>
</tr>
<tr>
<td>BCC</td>
<td>@Html.TextBoxFor( x => x.BCCAddresses, new { style = "width: 500px;" } )</td>
</tr>
<tr><td colspan="2"> </td></tr>
<tr>
<td colspan="2">Subject Line</td>
</tr>
<tr>
<td colspan="2">@Html.TextBoxFor( x => x.SubjectLineFormat, new { style = "width: 500px;" } )</td>
</tr>
<tr><td colspan="2"> </td></tr>
<tr>
<td colspan="2">Body Form</td>
</tr>
<tr>
<td colspan="2">@Html.TextAreaFor( x => x.BodyFormat, new { style = "width: 500px; height: 200px" } )</td>
</tr>
<tr><td colspan="2"> </td></tr>
<tr>
<td colspan="2">
<input id="ApplyChanges" type="submit" class="NavigationButton" value="Save Changes" />
<input id="CancelChanges" type="button" class="NavigationButton" value="Cancel Changes" />
</td>
</tr>
<tr>
<td colspan="2">
@Html.ValidationSummary()
</td>
</tr>
<tr><td colspan="2"> </td></tr>
</table>
}
Browser-Quelle:
<form action="/url" method="post">
<table>
<tbody><tr>
<td>From</td>
<td><input style="width: 500px;" id="FromAddress" name="FromAddress" value="" type="text"></td>
</tr>
<tr>
<td>CC</td>
<td><input style="width: 500px;" id="CCAddresses" name="CCAddresses" value="" type="text"></td>
</tr>
<tr>
<td>BCC</td>
<td><input style="width: 500px;" id="BCCAddresses" name="BCCAddresses" value="" type="text"></td>
</tr>
<tr><td colSpan="2"> </td></tr>
<tr>
<td colSpan="2">Subject Line</td>
</tr>
<tr>
<td colSpan="2"><input style="width: 500px;" id="SubjectLineFormat" name="SubjectLineFormat" value="" type="text"></td>
</tr>
<tr><td colSpan="2"> </td></tr>
<tr>
<td colSpan="2">Body Form</td>
</tr>
<tr>
<td colSpan="2"><textarea style="width: 500px; height: 200px;" id="BodyFormat" cols="20" rows="2" name="BodyFormat" data-val-required="The BodyFormat field is required." data-val="true"></textarea></td>
</tr>
<tr><td colSpan="2"> </td></tr>
<tr>
<td colSpan="2">
<input id="ApplyChanges" class="NavigationButton" disabled="disabled" value="Save Changes" type="submit">
<input id="CancelChanges" class="NavigationButton" value="Cancel Changes" type="button">
</td>
</tr>
<tr>
<td colSpan="2">
<div class="validation-summary-valid" data-valmsg-summary="true"><ul><li style="display: none;"></li>
</ul></div>
</td>
</tr>
<tr><td colSpan="2"> </td></tr>
</tbody></table>
</form>