Um Ihre zweite Frage zu beantworten: MVC kommt bereits mit integrierter Validierung.
Um eine Eigenschaft erforderlich zu machen, versehen Sie sie im ViewModel mit einem [System.ComponentModel.DataAnnotations.Required]
-Attribut. Sie können eine benutzerdefinierte Fehlermeldung auch angeben, indem Sie auf einen Schlüssel in einer Resx-Datei verweisen. Dieser Schlüssel sollte einen Platzhalter für den Namen der Eigenschaft enthalten.
Beispiel:
DataAnnotationsResources.resx
<data name="RequiredAttribute_ValidationError" xml:space="preserve">
<value>The {0} field is required.</value>
</data>
using System.ComponentModel.DataAnnotations;
public class ExampleCreateViewModel {
// Name is required for create!
[Required(ErrorMessageResourceType = typeof(DataAnnotationsResources), ErrorMessageResourceName = "RequiredAttribute_ValidationError")]
public string Name {get; set;}
}
Um erforderlichen Felder mit einem Sternchen zu machen, können Sie die folgende Erweiterungsmethode für die HTML-Helfer verwenden. Es verwendet die eingebaute Html.LabelFor Helper und YAML ym-required
Klasse, um den Asterix zu stylen.
/// <summary>
/// Renders a Label for the Property
/// If [DisplayName] Attribute was set, it uses it as Translation Key
/// Else it uses the Property Name as label
/// If Required Attribute was set and <see cref="showHint"/> == <code>true</code>, attaches an red asterix * to the label
/// </summary>
/// <param name="html">HTML Helper object.</param>
/// <param name="metaDataAccessor">Lambda to access the property that contains the metadata (DisplayName, Required Attributes)</param>
/// <param name="forFieldAccessor">Lambda to set the property that is referenced by the "for" HTML attribute of the <label> tag</param>
/// <param name="showHint">Set to <code>false</code> to never show the red asterix * even if the Property is required (e.g. not nullable value Properties like <code>bool</code>)</param>
public static MvcHtmlString LabelForPlusHint<TModel, TMetaDataValue, TForFieldValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TMetaDataValue>> metaDataAccessor,
Expression<Func<TModel, TForFieldValue>> forFieldAccessor,
bool showHint = true) {
var metadata = ModelMetadata.FromLambdaExpression(metaDataAccessor, html.ViewData);
var label = html.LabelFor(forFieldAccessor).ToHtmlString();
if (metadata.IsRequired && showHint) {
label = label.Replace("</label>", "<sup class=\"ym-required\">*</sup></label>");
}
return new MvcHtmlString(label);
}
public static MvcHtmlString LabelForPlusHint<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> metaDataAccessor, bool showHint = true) {
return LabelForPlusHint(html, metaDataAccessor, metaDataAccessor, showHint);
}
Anwendungsbeispiel: @Html.LabelForPlusHint(m => m.Name)
machen Etikett für die erforderliche 'Name' porperty.
Wir empfehlen Ihnen dringend, auf die MVC-Website zu gehen und die Grundlagen zu erlernen. –
Um Ihre zweite Frage zu beantworten: Es scheint, dass Sie ein Modell namens FYIndex verwenden. Fügen Sie jedem Feld, das für Ihr FYIndex-Modell erforderlich ist, [Erforderlich] hinzu. – w0ns88
Hinzufügen 4): Sie können [jQuery Autocomplete] (https://jqueryui.com/autocomplete/) verwenden. –