2017-02-15 3 views
0

Grundsätzlich habe ich ein Eingabefeld, in dem ein Benutzer seine E-Mail eingeben kann, und eine Schaltfläche, die die E-Mail sendet. Ich kann den Knopf drücken, und es leitet zu meiner "Details" Seite um. Die Eingabe aus der Texbox wird jedoch nicht an meinen Controller übergeben.Übermittlungsschaltfläche übergibt keine Eingabe aus Textfeld

Ausblick:

@using (Html.BeginForm("Index", "Home", FormMethod.Post)) 
{ 
    <div class="form-group form-inline"> 
     <label class="margin20">Sign up for newsletter</label> 
     @Html.TextBoxFor(Model => Model.Email, new { name= "mail", Class = "form-control", Style = "display:inline-block; max-width:200px", Placeholder="[email protected]" }) 
     <input type="submit" class="btn btn-default" style="display:inline-block" id="emailSignup"/> 
    </div> 
} 

Controller

public class HomeController : Controller 
{ 
// GET: Home 
public ActionResult Index() 
{ 
    return View(); 
} 
[HttpPost] 
public ActionResult Index(string mail) 
{ 
    return RedirectToAction("details", new {address = mail }); 
} 
public ActionResult details(string address) 
{ 
    EmailSignup person = new EmailSignup { Email = address}; 
    return View(person); 
    } 
} 

i verließ das Modell aus, weil es im Grunde 1 Eigenschaft ist. Ihre

Antwort

0

@Html.TextBoxFor(Model => Model.Email, ...) 

erzeugt einen Eingang mit name="Email".

Beachten Sie, dass new { name = "mail" } tut absolut nichts zum Glück (sehen Sie sich die HTML-Generierung), denn wenn dies der Fall wäre, würde es den Modellbindungsprozess versauen - der ganze Zweck der Verwendung der HtmlHelper Methoden ist, an Ihr Modell zu binden.

Sie könnten das Verfahren zu

ändern
[HttpPost] 
public ActionResult Index(string email) 

und die Parameter korrekt gebunden sein werden, soll jedoch Ihre Methode seine

[HttpPost] 
public ActionResult Index(XXX model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 
    return RedirectToAction("details", new { address = model.Email }); 
} 

wo XXX das Modell ist, dass Sie in der Ansicht erklärt (dh mit @model XXX), damit Sie die korrekte Modellbindung erhalten und die Validierung berücksichtigen können.

Beachten Sie auch, dass Sie Eigenschaft sollte

[Display(Name = "Sign up for newsletter")] 
[Required("Please ...")] // assuming you want to ensure a value is submitted 
[EmailAddress] // assuming you want a valid email 
public string Email { get; set; } 

sein und dann wird die Ansicht

@Html.LabelFor(m => m.Email)/correctly generates a label associated with the input 
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", placeholder="[email protected]" }) 
@Html.ValidationMessageFOr(m => m.Email) 

sein und ich empfehle das Hinzufügen eines weiteren Klassennamen und mit CSS, anstatt Sie Inline style = ".." Element

Verwandte Themen