ASP.NET MVC: Werte aus TextBoxFor, TextBox, DropDownList und TextArea

In ASP.Net MVC-ich bin öffnen Sie eine Ansicht aus anderer Sicht. Der erste Blick schickt zwei Werte auf den zweiten Blick. In der zweiten Ansicht kann der Benutzer eine E-Mail senden.

Ich habe zwei Probleme.

Das erste problem ist, dass die beiden Werte, die ich senden, von der ersten Ansicht nicht gezeigt wird in meinem zweiten Blick.

Das zweite problem ist, dass ich kann nicht die E-Mail-Formular zur trigger-meine E-Mail-Funktion im controller.

Hier ist eine ausführlichere Erklärung.

Meine erste Ansicht mit dem Namen ViewOne ist mit dem controller ControllerOne. In ViewOne ich habe den folgenden code zum aufrufen der zweiten Ansicht, ViewTwo:

@Html.ActionLink("Go to second view", "ViewTwo", "Home", new { firstval = firstval, secondval = secondval }, null)

Wenn die ActionLink geklickt wird, wird die folgende Funktion im controller HomeController heißt:

public ActionResult ViewTwo(string firstval, string secondval)
{
    MyModel model = new MyModel();
    model.firstval = firstval;
    model.secondval = secondval;
    var list = new SelectList(new[]
                                  {
                                      new {ID="1",Name="One"},
                                      new{ID="2",Name="Two"},
                                      new{ID="3",Name="Three"},
                                  },
                    "ID", "Name", 1);
    model.myList = list;
    return View(model);
}

So, in der controller HomeController ich versuchen, füllen Sie das Modell myModel mit den Werten, die ich von der ersten Ansicht, ViewOne.

Das Modell MyModel sieht wie folgt aus:

public class MyModel
{
    public string firstval { get; set; }
    public string secondval { get; set; }
    public IEnumerable<SelectListItem> myList { get; set; }

    [Required]
    [DisplayName("My name")]
    public string reporter { get; set; }

    [Required]
    [DisplayName("Description")]
    public string description { get; set; }

    [DisplayName("Dropdown")]
    public string myDropDownListValue { get; set; }
}

Ansicht ViewTwo sieht wie folgt aus:

@model myapp.Models.MyModel
@{ ViewBag.Title = "Send e-mail"; }

<hgroup class="title">
    <h1>@ViewBag.Title</h1>
    <h2>@ViewBag.Message</h2>
</hgroup>

@using (Html.BeginForm("sendEmail"))
{ 
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    <fieldset>
    <legend>Send e-mail</legend>

    <p>First value:</p>
    <p>@Html.LabelFor(m => m.firstval)</p>
    <p>Second value:</p>
    <p>@Html.LabelFor(m => m.secondval)</p>
    <p>Reporter</p>
    <p>@Html.TextBoxFor(m => m.reporter)</p>
    <p>Dropdownlist</p>
    <p>@Html.DropDownListFor(m => m.myDropDownListValue, Model.myList as SelectList)</p>
    <p>Description:</p>
    <p>@Html.TextAreaFor(m => m.description, new { @cols = 150, @rows = 5})</p>
 <input type="submit" value="Send e-mail"/>

</fieldset>

}

In der Steuerung HomeController, das ist der gleiche controller, der die ViewTwo () - Funktion wird ausgelöst, unmittelbar bevor der oben genannten form wird gezeichnet, ich habe die folgende Funktion:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult sendEmail(ContactModel model) //(string keyword, string partofspeech, string reporter, string category, string description, string acceptance)
{
    //code to send email
}

So, ich möchte diese Funktion, sendEmail, um ausgelöst, wenn ich das Formular abschicken. Aber das passiert nicht. Was passiert, wenn ich auf den submit-button (beschriftet mit "e-mail Senden") ist, dass die Sicht ViewTwo wird neu geladen und die ActionResult ViewTwo() in der controller-HomeController wird ausgelöst. Dies ist meine zweite (und größte) problem.

Auch, mein erstes problem ist, dass

<p>@Html.LabelFor(m => m.firstval)</p>

Zeigt nicht den Wert, der gesendet wird, von der ersten Ansicht. Es zeigt die Zeichenfolge "firstval". Bevor die form ist gezeichnet, ich sehe in der Funktion ViewTwo() der Wert wird korrekt gesendet vom ersten Blick.

Irgendwelche Ideen?

EDIT:

Zweite problem gelöst. Siehe meine Antwort unten.

  • Die ActionLink macht ein hyperlink, der nicht erlaubt, die aktuelle form-input-Werte. Dann schau mal hier auf, wie dies zu tun stackoverflow.com/questions/3449807/...
  • Ich würde zufrieden sein, senden Sie einfach die Werte aus der TextBoxFor, etc, zurück zu meiner Kontrolle, wie normale Variablen. Aber du sagst, dass nicht getan werden kann? 🙁
  • Ok, also Sie wollen mir das Absenden des Formulars statt. Dann kann ich einfach die <input type="submit"> Variante. Aber wie bekomme ich den controller zu verstehen, welche Funktion er verwenden soll..?
  • Wenn Sie uns über 'HtmlBeginForm()' es wird die POST zurück zum aktuellen Endpunkt mit dem Formular Werte, Sie sollte wirklich fangen Sie in einer view-Modell.
  • Wenn Sie nicht möchten, führen Sie einen vollständigen postback, müssen Sie Ajax verwenden. Verwenden Sie entweder Ajax.BeginForm oder einfach nur jQuery - $.ajax als Prozent des BIP.
  • Ich würde gerne einen vollständigen postback. Ich war mit einem ActionLink in die Prüfung, weil, das schien am einfachsten zu mir, aber wenn ich herausfinden kann, wie dies mit einer <input type="submit" /> stattdessen würde ich mich freuen. Aber ich kann nicht, dass die Arbeit. Siehe mein original-Beitrag unter NACHTRAG, wo ich erklärt habe, wo ich versage.
  • Als StuartLC schlägt vor, die ich auch verwenden würde,$.ajax zusammen bilden.serialisieren

InformationsquelleAutor doosh | 2013-06-20
Schreibe einen Kommentar