Ich beginne in der SteuerungIch habe ein zweites Modell Ich versuche, eine Ansicht auszufüllen und zurückzukehren. MVC 5
ViewBag.EmailStuff = new EmailStuff();
dann in der Ansicht, ich versuche, dieses Modell zu bekommen, weil die Ansicht auf einem anderen basiert.
@{var es = ViewBag.EmailStuff as EmailStuff;}
@using (Html.BeginForm("ContactStore", "Store", FormMethod.Post, new {emailstuff=es))
und ich habe die Validaton für diese 2 Feldern arbeiten, feuert sie, wenn sie
@Html.EditorFor(m => es.EventName)
@Html.ValidationMessageFor(m => es.EventName, "", new { @class = "text-danger-yellow" })
<br />
@Html.EditorFor(m => es.MessageBody)
@Html.ValidationMessageFor(m => es.MessageBody, "", new { @class = "text-danger-yellow" })
leer sind, aber ich kann nicht herausfinden, wie die Werte an den Controller zu erhalten, wenn die Felder Infos in ihnen.
Am Controller gibt das Modell, auf das ich verweise, Nullen für beide Eingaben zurück, obwohl DataAnnotations funktioniert.
Ich weiß, das ist ein Hack. Ich versuche, die Forms-Sammlung zu verlassen und zu lernen, wie man Modelle verwendet. Die Ansicht selbst verwendet ein anderes Modell als das, das ich zu validieren versuche. Am oberen Rand der Ansicht können Sie ein anderes Modell sehen, das nichts mit den 2 Feldern zu tun hat, die ich an einen E-Mailer sende.
@model Stores.Models.vProfiles
@using Microsoft.AspNet.Identity
@using Microsoft.AspNet.Identity.EntityFramework
@using Stores.Models
Hier ist, wo die Informationen in sein soll kommen:
public ActionResult ContactStore(EmailStuff emailstuff)
{
Hier ist mein Modell:
public class EmailStuff
{
[Required(ErrorMessage = "Enter an event name")]
public string EventName { get; set; }
[Required(ErrorMessage = "You need to enter a message")]
public string MessageBody { get; set; }
}
}
Ich werde wahrscheinlich für alle diese Spaghetti in der Hölle verbrennen , aber ich hoffe, dass es eine einfache Lösung gibt, die ich vermisse (neben dem Zusammenkleben mehrerer Ansichten).
Erstellen Sie ein Ansichtsmodell, das die von Ihnen benötigten Eigenschaften enthält. Verwenden Sie nicht 'ViewBag'. Wenn Sie Eingaben mit Namensattributen erstellen, die keine Beziehung zu Ihrem Modell haben, können Sie nicht an Ihr Modell binden. Alternativ können Sie '@ Html.Action()' verwenden, um eine Servermethode aufzurufen, die eine Teilansicht Ihres Formulars zurückgibt. –
In Ihrem Formular sagen Sie, dass Ihre POST-Aktionen ContactShuttle (im Shuttle-Controller) sind. In der Steuerung, die Sie gezeigt haben, sehen wir, dass die Aktion ContactStore genannt wird. – ssimeonov
sorry ssimeonov. Ich benutzte einen Code, den ich irgendwo gefunden hatte. – JustJohn