2017-01-18 1 views
1

Ich habe eine Hauptform, die ein Div zu einer Teilansicht Rendern ist. Ich lade die Kontrollen sehr gut. Auf Hauptformular Ich habe einen Controller, der eine Funktion, die Daten aus dem Teilansichtsformular erhalten muss, wenn ich auf die Schaltfläche auf Teilansicht, es nicht den Controller (SaveSMRNotesFile).Wie kann ich den Controller mit Teilansicht Formular, die unterschiedlichen Formulartyp (Ajax und beginnen Formular) haben

Wenn ich in der Teilansicht auf die Schaltfläche zum Hochladen klicke, geht es zum SearchUploadNotes Controller, wenn ich den Breakpoint setze und das ist nicht der, den ich möchte.

Wie kann ich die Daten mit Teilansicht an einen Controller übergeben?

Hauptformular

@using (Ajax.BeginForm("SearchUploadNotes", "UploadNotes", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "dvUploadNotes" }, new { @class = "form-horizontal", role = "form" })) 
{ 

<div id="divControlls"> 
    @{Html.RenderPartial("_UploadNotesControllsGridPartialV", new TTAF.Portal.Parts.Web.Models.UploadNotesFolder.UploadNotesViewModel());} 
</div> 


<button class="btn btn-primary " id="btnSearch" name="submit" type="submit">Search</button> 
} 

Teilansicht

@using (Html.BeginForm("SaveSMRNotesFile", "UploadNotes", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal" , @id = "form-id", role = "form" })) 
{ 
<button class="btn btn-primary " id="btnn" name="submit" type="sumbit" onclick="">Upload</button> 
} 

Reglerfunktion

[HttpPost] 
public ActionResult SaveSMRNotesFile(UploadNotesViewModel mymodel) 
{ 
} 
+0

verschachtelte Formen sollten nicht in der html sein –

+0

dann wie übergebe ich meine Funktionen an den Controller oder machen Sie die Kommunikation mit dem Controller. –

+0

Es scheint so, als ob Sie die Datei über AJAX auf den Server hochladen und dann die Notizen über ein Hauptformular speichern möchten. Ich würde empfehlen, FormData zu verwenden und die Datei über AJAX zu veröffentlichen. Entfernen Sie

aus Ihrer Teilansicht. Lassen Sie mich wissen, wenn Sie Code dafür benötigen –

Antwort

1

Ein Ansatz für Ihr Problem könnte sein:

Hauptformular

**@using (Ajax.BeginForm("SearchUploadNotes", "UploadNotes", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "dvUploadNotes" }, new { @class = "form-horizontal", role = "form" })) 
{ 

@if(ViewBag.Control){ 
    <div id="divControlls"> 
     @{Html.RenderPartial("_UploadNotesControllsGridPartialV", new TTAF.Portal.Parts.Web.Models.UploadNotesFolder.UploadNotesViewModel());} 
    </div> 
    } 

<input class="btn btn-primary " id="btnSearch" value="Search" type="submit" formaction="SearchUploadNotes"> 
} 

Teilansicht

<!-- RENDER YOUR DIFFERENT DATA AFTER YOUR SEARCH --> 

    <input class="btn btn-primary " id="btnn" value="Upload" type="sumbit" formaction="SaveSMRNotesFile"/> 

Reglerfunktion

[HttpPost] 
    public ActionResult SaveSMRNotesFile(UploadNotesViewModel mymodel) 
    { 
// DO YOUR STUFF COMING FROM THE DATA RECOVERED OF YOUR FORM IN A UploadNotesViewModel OBJECT 
    } 
    [HttpPost] 
    public ActionResult SearchUploadNotes(UploadNotesViewModel mymodel) 
    { 
    // DO YOUR STUFF COMING FROM THE DATA RECOVERED OF YOUR FORM IN A UploadNotesViewModel OBJECT. RETURNS YOUR DATA AFTER THE SEARCH AND RETURN A VIEWDATA.CONTROL BOOL FOR RENDERING YOUR PARTIAL. 
    } 

Die Idee, soweit ich von Ihrem Beitrag (Entschuldigung für mein Englisch :)) habe ist:

Sie werden nur ein Formular mit der Schaltfläche zum Absenden der Suche rendern, wenn es geklickt wird, werden Sie Ihre teilweise, durch ViewData.Control-Wert, mit den gesuchten Daten und einem neuen Senden-Button zum Hochladen.

Dieser Knopf Aufruf, in der gleichen Controller aber eine andere Methode, für Formaction-Attribut, namens SaveSMRNotesFile definiert, und es wird Ihre Sachen tun. Ich denke, die neuen Werte für diese Daten hochladen.

In der Hoffnung, es hilft. Lass mich irgendwelche Zweifel wissen. Prost Kumpel.

+0

Was ist @if (ViewBag.Control) was ist? ist es Controller Name? –

+0

Nicht, ist ein kleiner Container für Daten, die Sie von Ihrem Controller senden können, anstatt Daten mit dem Modell zu übergeben. Es gibt drei Arten davon. ViewData, ViewBag und Tempdata. Sie sind für diese Art von Purpose verwendet ... Überprüfen Google Mate ...;) –

+0

Übrigens, können Sie meine Wirkung belohnen und meine Antwort bewerten? Cheers Kumpel :) –