[jquery] Wie kann ich ein Array von Zeichenfolge auf ASP.NET MVC Controller ohne ein Formular bereitstellen?



3 Answers

Zu Ihrer Information: JQuery hat die Art und Weise geändert, wie Postdaten serialisiert werden.

http://forum.jquery.com/topic/nested-param-serialization

Sie müssen die Einstellung "Traditional" auf "True" setzen

{ Values : ["1", "2", "3"] }

wird als herauskommen

Values[]=1&Values[]=2&Values[]=3

Anstatt von

Values=1&Values=2&Values=3
Question

Ich erstelle eine kleine App, um mir ASP.NET MVC und JQuery beizubringen, und eine der Seiten ist eine Liste von Elementen, in denen einige ausgewählt werden können. Dann würde ich gerne eine Taste drücken und eine Liste (oder etwas Äquivalentes) an meinen Controller senden, der die IDs der ausgewählten Elemente enthält, indem ich die Post-Funktion von JQuery verwende.

Es ist mir gelungen, ein Array mit den IDs der ausgewählten Elemente zu erhalten, und jetzt möchte ich das posten. Eine Möglichkeit, dies zu tun, besteht darin, auf meiner Seite ein Dummy-Formular mit einem versteckten Wert zu erstellen und dann den versteckten Wert mit den ausgewählten Elementen festzulegen und dieses Formular zu posten. das sieht jedoch sehr unfreundlich aus.

Gibt es einen saubereren Weg, um dies zu erreichen, indem Sie das Array direkt an den Controller senden? Ich habe ein paar verschiedene Dinge ausprobiert, aber es sieht so aus, als ob der Controller die Daten, die er empfängt, nicht abbilden kann. Hier ist der Code soweit:

function generateList(selectedValues) {
   var s = {
      values: selectedValues //selectedValues is an array of string
   };
   $.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");
}

Und dann sieht mein Controller so aus

public ActionResult GenerateList(List<string> values)
{
    //do something
}

Alles, was ich geschafft habe, ist ein "Null" im Controller-Parameter ...

Irgendwelche Tipps?




Eine andere Implementierung, die auch mit einer Liste von Objekten arbeitet, nicht nur mit Strings:

JS:

var postData = {};
postData[values] = selectedValues ;

$.ajax({
    url: "/Home/SaveList",
    type: "POST",
    data: JSON.stringify(postData),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(data){
        alert(data.Result);
    }
});

Angenommen, 'selectedValues' ist Array of Objects.

In der Steuerung ist der Parameter eine Liste der entsprechenden ViewModels.

public JsonResult SaveList(List<ViewModel> values)
{    
    return Json(new { 
          Result = String.Format("Fist item in list: '{0}'", values[0].Name) 
    });
}



Sie können den globalen Parameter mit einstellen

jQuery.ajaxSettings.traditional = true;








Related