2017-03-15 5 views
1

Ich habe eine Frage, ich bin wirklich neu in der Arbeit mit Asp.net. Ich habe ein Javascript, wo ich Daten an meinen Controller weitergeben möchte.Pasing Javascript Ergebnis anzeigen

<script type="text/javascript"> 
 
     $("#SearchButton").on("click", function() { 
 
      var $sucheMoped = []; 
 
      $("#tab_logic tbody tr") 
 
       .each(function() { 
 
        var $Item = $(this); 
 
        var suchfeld = $Item.find("td > input[name='Suchfeld']").val(); 
 
        var schluessel = $Item.find("td > select[name='Suchschluessel'] > option:selected").val(); 
 
        alert(suchfeld + "&&&" + schluessel); 
 
        $sucheMoped.push({ 
 
         Suchfeld: suchfeld, 
 
         Suchschluesseltyp: schluessel 
 
        }); 
 
       }); 
 
      window.open('@Url.Action("MainView","MainView")?SuchObject='+$sucheMoped); 
 
     }) 
 
    </script>

Ich möchte nur die "sucheMoped" von meiner javaScript zu meinem Controller zu übergeben. Mein Controller erwartet gerade eine IEnumerable von Objekten mit Eigenschaften Suchfeld und Suchschlüsseltyp.

Wer eine Idee?

Danke Jungs.

Antwort

1

Zunächst einmal müssen Sie die Art und Weise Sie die Controller-Aktion aufrufen ändern. Sie sollten das Array unter Verwendung der JSON.stringify()-Methode stringieren.

So sollte dies wie folgt aussehen:

window.open('@Url.Action("MainView","MainView")?SuchObject='+JSON.stringify($sucheMoped));

Dann benötigen Sie ein eigenes Modell Bindemittel erstellen Sie Ihre Array mit dem Aktionsparameter zu binden. Dies ist ein einfacher Array-Modell-Binder, der nur zu Demonstrationszwecken verwendet wird, Fehler oder ähnliches nicht berücksichtigt, aber in diesem Szenario funktioniert er, indem er die korrekten Daten weiterleitet. Bitte ändern Sie ihn entsprechend Ihren Anforderungen.

public class ArrayModelBinder: DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var rawArray = controllerContext.HttpContext.Request.QueryString["SuchObject"]; 
     var array = JsonConvert.DeserializeObject<IEnumerable<MyObject>>(rawArray); 

     return array; 
    } 
} 

Was ich hier tun, ist die Abfragezeichenfolge über die URL vorgelegt zu bekommen, wandelt es mit JsonConvert.Deserialize<T> Methode und gibt es zurück.

Sie müssen einfach Ihre Parameter in die mit dem benutzerdefinierten Modell Binder Aktion des Controllers dekorieren, wie folgt aus:

[HttpGet] 
public ActionResult Search([ModelBinder(typeof(ArrayModelBinder))]IEnumerable<MyObject> SuchObject) 
{ 
    return View(SuchObject); 
} 

bearbeiten

window.open nützlich, wenn Sie ein neues Browserfenster öffnen möchten . Sie könnten damit auch einen neuen Tab öffnen.

Um an einem anderen Ort zu navigieren, ohne einen neuen Tab oder Fenster zu öffnen, verwenden Sie die window.location Eigenschaft wie folgt aus:

window.location = '@Url.Action("Search", "Home")?SuchObject=' + JSON.stringify(array);

+0

Danke, das funktioniert wirklich gut. Meine letzte Frage ist, dass diese window.open-Methode immer eine neue Registerkarte öffnet, aber ich möchte nur mein vorhandenes überschreiben ... –

+0

Dann verwenden Sie 'window.location'.Aktualisierung entsprechend. Wenn es Ihr Problem löst, bitte upvote und markieren Sie als Antwort. Vielen Dank – gdyrrahitis

0

Sie können die jquery-Bibliothek $ .getScript verwenden, um die Aktionsmethode in Ihrem Controller und den Rückgabewert javascriptResult in Ihrer Aktion aufzurufen.

$.getScript("Home","Display") 

// Home Controller 
private JavaScriptResult Display() 
{ 
    string message = "alert('Hello World');"; 

    return new JavaScriptResult { Script = message }; 
} 
0

Wenn Sie die jQuery.ajax Methode verwenden, können Sie komplexe Objekte wie data Parameter.

$.ajax({ 
    url: '@Url.Action("MainView", "MainView")', 
    type: 'GET', 
    data: { 'SuchObject': $sucheMoped }, 
    success: function (htmlContent) { 
     // write content to new window (from http://stackoverflow.com/a/23379892/1450855) 
     var w = window.open('about:blank', 'windowname'); 
     w.document.write(htmlContent); 
     w.document.close(); 
    } 
}); 
+0

mit dieser meiner URL wie folgt aussieht: http: // localhost: 49251/? SuchObjekt = [Objekt% 20Objekt] und ich bekomme keinen Parameter in meinem Controller –

+0

Bearbeitete meine Antwort vollständig, weil Sie ein komplexes Objekt übergeben möchten. –