2017-07-27 2 views
0

Ich habe ein Formular auf meiner Ansicht:Ein Modell für zwei Submit-Buttons in ASP.NET MVC

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.DateFrom, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.DateFrom, new { htmlAttributes = new { @class = "form-control date-picker" } }) 
       @Html.ValidationMessageFor(model => model.DateFrom, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.DateTo, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.DateTo, new { htmlAttributes = new { @class = "form-control date-picker" } }) 
       @Html.ValidationMessageFor(model => model.DateTo, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" [email protected]("CreateReport") /> 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.EMail, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.EMail, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.EMail, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Send to email" class="btn btn-default" [email protected]("SendEmail") /> 
      </div> 
     </div> 
    </div> 
} 

Wie Sie Ich habe zwei butons sehen, Aktion erste Ruftaste Create und als Ruftaste Sendemail Aktion senden . Ich möchte einen Bericht erstellen und diesen Bericht dann per E-Mail senden.

Hier sind meine Controller-Aktionen:

public ActionResult Index() 
    { 
     Report 

report=ReportRepository.GetReport(DateTime.Parse("02.08.1996"), DateTime.Parse("07.08.1996")); 
      return View(report); 
     } 

     public ActionResult CreateReport(Report report) 
     { 
      report = ReportRepository.GetReport(report); 
      return View("Index", report); 
     } 

     public ActionResult SendEmail(Report report) 
     { 
      return View("Index", report); 
     } 

Und meine Modellklasse:

public class Report 
{ 
    public DateTime DateFrom { get; set; } 
    public DateTime DateTo { get; set; } 
    public List<OrderDetails> Orders { get; set; } 
    [Display(Name = "Email address")] 
    [EmailAddress(ErrorMessage = "Invalid Email Address")] 
    public string EMail { get; set; } 
} 

Also ich meine, dass ich Aufträge Liste in Create Aktion ausfüllen und anzuzeigen, und nachdem es mich drücken „senden E-Mail-Button, das ist Aufruf "SendEmail" Aktion, wo ich die Liste der Bestellungen in Datei speichern und senden.

Das Problem ist, dass in der Aktion "SendEmail" List ist null. Wie kann ich es beheben?

Antwort

0

Der einfachste Weg, an den ich denken könnte, ist, Ihre Übermittlungsaktion für create report zu entfernen und dies mit einem Ajax-Aufruf zu behandeln. Damit haben Sie nur eine Submit-Aktion.

Oder Sie können mit 2 Formen in Ihrer Ansicht versuchen.

Persönlich bevorzuge ich die erste Option.

0

Ich habe eine Lösung gefunden. Die Lösung besteht nicht darin, das Modell an den Controller zu übergeben, sondern meine Liste in der Sitzung zu speichern. So:

public ActionResult Index() 
    { 
     Report report=ReportRepository.GetReport(DateTime.Parse("02.08.1996"), DateTime.Parse("07.08.1996")); 
     Session["Orders"] = report.Orders; 
     return View(report); 
    } 

    public ActionResult CreateReport(Report report) 
    { 
     report = ReportRepository.GetReport(report); 
     Session["Orders"] = report.Orders; 
     return View("Index", report); 
    } 

    public ActionResult SendEmail(Report report) 
    { 
     List<OrderDetails> orders = (List<OrderDetails>)Session["Orders"]; 
     report.Orders = orders; 
     return View("Index", report); 
    }