2016-10-03 4 views
-1

Ich muß passieren bereits bestehendes Modell in ein Verfahren von meinem Teil nennt, ist das Problem, dass diese SyntaxASP.NET MVC eine Methode

@using (Html.BeginForm("EmployeeOverallReportFilter", "Reports", FormMethod.Post)) {}

ist neu zu meinem Modell (es aussieht), weil mein Controller mit Datenempfang Modell nur von edit-Box innerhalb @using {}

mit anderen Worten:

  1. new Model
  2. einige Daten & doMagic und geht auf meinen Teil
  3. In meiner teilweise mehr Daten hinzufügen und es an die Steuerung
  4. Arbeit mit Daten

Und ich habe das Problem, in Schritt 3 übergeben, da einige, wie (ich glaube, wegen @using (Html.BeginForm("EmployeeOverallReportFilter", "Reports", FormMethod.Post)) {}) i Daten verliere in Schritt 2 hinzugefügt

Die Frage ist:

ist es wahr? Kann @using (Html.BeginForm()) {} mein Modell neu erstellen oder sollte ich den gesamten Code hinzufügen?

Es gibt eine andere Möglichkeit, eine Methode aufzurufen und dort Daten zu übergeben?

Ich habe dies versucht: <input type="submit" onclick="@Html.Action("EmployeeOverallReportFilter", "Reports", Model)" />

Aber der Fehler:

Exception Details: System.Web.HttpException: A public action method 'EmployeeOverallReportFilter' was not found on controller 'BTGHRM.Controllers.ReportsController'.

[HttpPost] 
    public ActionResult EmployeeOverallReportFilter(EmployeeOverallReport model) 
    { 
     //foreach(var item in model.ListOfPersonalData) 
     //{ 
     // //NameFiler 
     // if((!item.FirstName.Contains(model.ModelFilters.NameFilter)) && model.ModelFilters.NameFilter!=String.Empty) model.ListOfPersonalData.Remove(item); 
     //} 
     return View("EmployeeOverAllReport", model); 
    } 
+2

Ein Formular gibt nur die Werte seiner erfolgreichen Steuerelemente zurück. Wenn Sie zuvor einige verknüpfte Daten gespeichert haben, fügen Sie ihre ID in einem Roure-Wert oder einer ausgeblendeten Eingabe hinzu, damit Sie sie veröffentlichen und diese Daten in der POST-Methode abrufen können. –

+1

Der Fehler tritt auf, weil Sie eine Methode auf Ihrem Berichtscontroller haben sollten, die 'EmployeeOverallReportFilter' genannt wird und mit '[Post] 'versehen werden muss. Um vorhandene Daten zurück zu übertragen, müssen Sie das Ansichtsmodell verwenden, um die Eigenschaften der Daten, die Sie behalten möchten, und die Methode [Get] ', die Sie festlegen müssen, einzuschließen. Wenn Sie dann erneut posten, werden sie so lange ausgeführt, wie sie Teil des Formulars sind. – bilpor

+1

Sie müssen ausgeblendete Felder für alle Eigenschaften einfügen, die Sie zusammen mit den Daten zurückgeben möchten, die vom Benutzer im Formular eingegeben wurden. – sachin

Antwort

2

Ich würde eine Sitzung und speichern Sie die vorhandenen Modell vorschlagen erstellen und setzen dann die neuen Änderungen in der bestehendes Modell aus der Sitzung. Wenn Sie alle Ihre Daten auf der Seite mit einem Mechanismus wie versteckte Felder speichern, wird Ihre Seite schwer.

+0

Es sieht aus wie eine Lösung, aber ich habe ein Problem mb Sie können mir helfen: EmployeeoverallReport geben = Liste; @Session ["ReportModel"] = geben; (SPÄTER) var take = Sitzung ["ReportModel"]; Das Problem ist, dass es Convert Typ "Objekt" in meinem Modell nicht konvergieren kann, und daher kann ich nicht auf innere Eigenschaften im Modell zugreifen. –

+1

var take = (EmployeeOverallReport) Sitzung ["ReportModel"]; Das sollte es tun. –

+0

@R Jain vielen Dank, gute Fremde) –