So, ich habe ein Kontaktformular in meiner MVC 2-Anwendung.Rufen Sie das Attribut DisplayName aus der Eigenschaft eines MVC2-Modells ab
Ich möchte alle Eigenschaften meines "ContactModel
" programmatisch per E-Mail senden.
Hier ist, was ich möchte in psuedo-ish Code tun:
[HttpPost]
public ActionResult Contact(ContactModel model)
if(!ModelState.IsValid){
TempData["errorMessage"] = "You are a failure!";
return View(model);
}
else{
var htmlMessage = new StringBuilder("<table>");
const string templateRow = "<tr><td>{0}: </td><td><strong>{1}</strong></td></tr>";
/* ************************************************* */
/* This is the part I need some serious help with... */
/* ************************************************* */
foreach(var property in someEnumerableObjectBasedOnMyModel){
htmlMessage.AppendFormat(templateRow,
// the display name for the property
property.GetDisplayName(),
// the value the user input for the property (HTMLEncoded)
model[property.Key]
);
}
/* ************************************************* */
htmlMessage.Append("</table>");
// send the message...
SomeMagicalEmailer.Send("[email protected]", "[email protected]", "Subject of Message ", htmlMessage.ToString());
TempData["message"] = "You are awesome!";
return RedirectToAction("Contact", "Home");
}
}
Falls es darauf ankommt ... ContactModel
richtet die DisplayName
Attribute wie folgt aus:
[DisplayName("First Name")]
public string FirstName {get; set ;}
Ich möchte dies schön und trocken halten, indem ich die DisplayName-Namen nicht wiederhole.
Insbesondere möchte ich über jede Eigenschaft in meinem ContactModel auflisten, seinen DisplayName abrufen und seinen übermittelten Wert abrufen.
+1 Das funktioniert super. Gibt es einen Weg, es ohne Reflexion zu tun? Die App wird unter MediumTrust ausgeführt. : -/ –
@David - die Attribute nicht direkt verwenden. – tvanfosson
für Passanten: Sie können den DisplayName über: 'ModelMetadata.FromLambdaExpression (Ausdruck, neues ViewDataDictionary (Modell)) .DisplayName;' –