문제

POST 대신 GET을 통해 호출할 때 MVC가 내 사용자 정의 모델 매개변수를 채우는 데 문제가 있는 것 같습니다.

다음과 같은 작업을 호출하는 JavaScript 조각이 있습니다.

$.getJSON('<%= Url.Action("DoSearch") %>' + location.search,
    function(data) {
        if (data.Result == "OK") {
            location.href = location.href;
        }
    });

이것이 하는 일은 기본적으로 호출 페이지와 동일한 쿼리 문자열을 전달하는 별도의 작업을 호출하는 것입니다.그런 다음 결과가 "OK"이면 현재 페이지를 새로 고칩니다.

작업은 다음과 같이 정의됩니다.

    public ActionResult DoSearch(SearchParameters searchParameters)

모델은 다음과 같습니다.

public class SearchParameters
{
    public string Query;
    ...
}

호출 URL(firebug로 확인됨)은 다음과 같습니다. /DoSearch?Query=some+query.(또한 시도했다 /DoSearch?searchParameters.Query=some+query 성공하지 못함)

내가 무엇을 시도하든 내 매개변수는 항상 비어 있는 것으로 표시됩니다(null이 아니고 모든 매개변수가 기본값으로 초기화됨).

대신에 다음과 같이 작업을 정의하면:

    public ActionResult DoSearch(string Query, ...)

그러면 내 매개변수가 올바르게 채워집니다.그러나 모델에는 없습니다.

나는 다음과 같이 가정한다:

a) 개체 모델을 채우는 것은 GET 요청에 대해 작동하지 않습니다.

b) 내가 뭔가 잘못하고 있어요

어떤 아이디어가 있나요?감사해요.

도움이 되었습니까?

해결책

클래스를 바인딩하려면 공용 속성이 필요합니다.

바꾸다

public string Query;

~와 함께

public string Query{get;set;}

적어도 그것이 내 프로젝트에서 작동하도록 하기 위해 해야 했던 일입니다.혹시 다른 문제도 있으신지 모르겠습니다.아, 그리고 GET도 사용했으니 제대로 작동할 겁니다.

이것은 내 매개변수 클래스입니다.

public class Parameters
{
    public int? page { get; set; }
    public int? pageSize { get; set; }
    public string[] columnsToDisplay { get; set; }
    public string columnToSort { get; set; }
    public bool? descending { get; set; }
}

필드와 바인딩하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top