2017-07-18 2 views
0

Ich erzeuge meine Formularelemente durch Schleifen über ein Array. Also habe ich ein Array = ["Name", "Alter"] und ich Schleife über jedes Element und erstellen Sie ein Textfeld mit dem entsprechenden Namen und zugehörigen Daten.ASP.NET MVC: Erstellen Sie ValidationMessageFor Dynamic

Deshalb Erstellen ich meine Form Element dynamisch, so dass

<input class="input-validation-error text-box single-line" data-val="true" data-val-required="@arr[i] is required" id="@arr[i]" name="@arr[i]" type="text" value=""> 
<span class="field-validation-error" data-valmsg-for="@arr[i]" data-valmsg-replace="true"></span> 

Statt:

@Html.EditorFor(model => model.age) 
@Html.ValidationMessageFor(model => model.age) 

jedoch aus diesem Grund werden die clientseitige Meldungen nicht erzeugt wird. Es würde den Fehler in der serverseitigen Überprüfung abfangen, aber clientseitig funktioniert nicht mehr.

enter image description here

Wie kann ich die clientseitige Nachricht erhalten zu arbeiten, während die Fähigkeit, hält die Form dynamisch zu erstellen, dass eine solche in der Linie des Codes des Modells blies Eigenschaftsname dynamisch zur Verfügung gestellt werden? Gibt es einen Weg?

Ich weiß, dass oben Code nicht funktioniert, aber es ist nur zu betonen, was ich in einer Lösung suche.

Antwort

1

Sie müssen die Validierung explizit inline oder mit JavaScript registrieren.

More jQuery Validate Examples (Im Folgenden finden Sie ein kurzes Beispiel)

$("#myform").validate({ 
    rules: { 
    name: "required" 
    } 
}); 

Inline ex:

<input id="age" name="age" required /> 
0

Dies funktioniert:

@model Testy20161006.Controllers.MessageViewModel 
@{ 
    Layout = null; 
} 

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>IndexStackOverflow900</title> 

</head> 
<body> 
    <div> 
     @using (Html.BeginForm()) 
     { 
      int i = 0; 
      foreach (var arr in Model.myArray) 
      { 
       <input class="input-validation-error text-box single-line" data-val="true" 
         data-val-required="@arr is required" [email protected] [email protected] type="text" value=""> 
       <br /> 
       @Html.ValidationMessage(arr); 
       i++; 
      } 

      <input type="submit" value="submit" /> 
     } 
    </div> 
</body> 
</html> 

Controller/Modell:

public class MessageViewModel 
{ 
    public List<string> myArray = new List<string>(); 
    [Required] 
    public string name { get; set; } 
    [Required] 
    public string age { get; set; } 
} 

public class HomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult IndexStackOverflow900(MessageViewModel mvm) 
    { 
     if (ModelState.IsValid) 
     { 
     } 
     else 
     { 
      //you can narrow it down to which field caused the error by inspecting ModelState 
      //List<ModelErrorCollection> errors = controller.ModelState.Select(x => x.Value.Errors) 
      //   .Where(y => y.Count > 0) 
      //   .ToList(); 
      ModelState.AddModelError("name", "name is required"); 
      ModelState.AddModelError("age", "age is required"); 
     } 

     FactorCode(mvm); 
     return View(mvm); 
    } 

    public ActionResult IndexStackOverflow900() 
    { 
     MessageViewModel mvm = new MessageViewModel(); 
     FactorCode(mvm); 
     return View(mvm); 
    } 

    public void FactorCode(MessageViewModel mvm) 
    { 
     mvm.myArray.Add("name"); 
     mvm.myArray.Add("age"); 
    } 
Verwandte Themen