Не удается передать более одного анонимного параметра в URL через ajax - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь отправить некоторые идентификаторы через значения маршрута с моими данными в моем вызове ajax, и у меня возникают проблемы при передаче более одного.

Это то, что я должен сделать сейчас ... Затем разделить его на массив на сервере.

@Url.Action("Save", "MyController", New With {.Ids = ViewData("Id1") & "," &   ViewData("Id2") & "," & ViewData("Id3") & "," & ViewData("Id4")})");

Вот что я хотел бы сделать:

var url = "@Url.Action("Save", "MyController", New With {.Id1 = ViewData("Id1"), .Id2 = ViewData("Id2"), .Id3 = ViewData("Id3")})";

$.ajax({            
    type: "POST",            
    dataType: "json",            
    url: urlString,
    data: json,                     
    success: function(data) {                                  

}

});

подпись метода контроллера:

<HttpPost()> _
    Function Save(ByVal json As String, ByVal Id1 As String, ByVal Id2 As String, ByVal Id3 As String) As JsonResult

Я также попытался использовать класс, подобный этому (MyClass имеет соответствующие имена свойств для параметров, которые я передаю):

<HttpPost()> _
    Function Save(ByVal json As String, theClass as MyClass) As JsonResult

Данные JSON выглядят так:

"json={'control1' : 'test1', 'control2' : 'test2'}"

Значения параметров: Id1 - целое число, Id2 - гид, а Id3 - целое число.

К сожалению, когда я попробую это, я получу только свой первый параметр, а остальные - ничто.

Любой совет будет высоко ценится.

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2012

Вы можете отправить запрос JSON:

var url = '@Url.Action("Create", "FormGeneration")';

var jsonData = @Html.Raw(Json.Encode(New With { .Id1 = ViewData("Id1"), .Id2 = ViewData("Id2"), .Id3 = ViewData("Id3") }));
// assign some other properties
jsonData.foo = 'bar';

$.ajax({            
    url: url,
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(jsonData),
    success: function(data) {                                  

    }
});

Это успешно вызовет и передаст параметры следующему действию:

<HttpPost()>
Public Function Create(ByVal id1 As Integer, ByVal id2 As Integer, ByVal id3 As Integer, ByVal foo As SomeViewModel) As ActionResult
    ...
End Function

Вы также можете отправить эти целые числа в виде массива:

var url = '@Url.Action("Create", "FormGeneration")';

var jsonData = @Html.Raw(Json.Encode(New With { .ids = { ViewData("Id1"), ViewData("Id2"), ViewData("Id3") } }));
// assign some other properties
jsonData.foo = 'bar';

$.ajax({            
    url: url,
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(jsonData),
    success: function(data) {                                  

    }
});

, которое будет связано со следующим действием:

<HttpPost()>
Public Function Create(ByVal ids As Integer(), ByVal foo As SomeViewModel) As ActionResult
    ...
End Function

Но если у вас уже есть модель представления (что, кстати, следует делать), идентификаторы могут быть непосредственносвойство вашей модели представления, так что ваше действие контроллера теперь выглядит так:

<HttpPost()>
Public Function Create(ByVal foo As SomeViewModel) As ActionResult
    ...
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...