2016-06-02 5 views
0
  1. die Anwendung eine Form hat, die der Benutzer
  2. der Inhalt in der Dropdown-Liste auszuwählen/Mehrfachauswahl kann aus einer Datenbank abgerufen wird, nicht hart codiert:Wie man Pflichtfeld anzeigt und Fehlermeldung in asp.net mvc zeigt?

    <select class="btn btn-default col-md-1" name="fy_dropdown" id="fy_dropdown"> 
        @foreach (var fy in Model.FYIndex) 
        { 
         <option value="@fy">@fy</option> 
        } 
    </select> 
    
  3. das Layout (Spaltenname , Stil usw.) des Formulars befindet sich im Skriptordner, als .js-Datei befindet sich der Inhalt in der Dropdown-Liste im Ansichtsordner als .cshtml-Datei.

so meine Frage ist 1. Warum wird das Layout und den Inhalt in getrennten Orten definiert? 2. Ich möchte einige Felder mit einem Stern markieren, und wenn diese Option deaktiviert ist, zeigt das Feld eine Warnung (wie ein rotes Kästchen) auf der Clientseite an. Wie soll ich das machen? Sollte ich ein erforderliches Attribut in der cshtml-Datei hinzufügen? 3. Ich möchte, dass das Feld dem Benutzer anzeigt, welches/welche Felder ausgewählt sind. Wie soll ich das machen? 4. Da unter jedem Feld gibt es viele Optionen, wie implementiere ich ein Suchfeld (case insensitive) in der Dropdown-Liste?

Ich bin neu in der MVC-Modell, so dass ich wirklich jede Hilfe, die mir helfen kann zu verstehen, danke!

+1

Wir empfehlen Ihnen dringend, auf die MVC-Website zu gehen und die Grundlagen zu erlernen. –

+0

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

+0

Hinzufügen 4): Sie können [jQuery Autocomplete] (https://jqueryui.com/autocomplete/) verwenden. –

Antwort

0

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 &lt;label&gt; 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.

Verwandte Themen