1

javascript関数からasp.netmvcコントローラーアクションに渡す文字列の2d配列(12x5)があります。IEで開発者ツールを使用すると、配列に希望するものが入力されていることがわかっているため、問題はpost関数内またはその周辺にあります。

var dateArray = new Array();
//Populate Data

$.post("/Event/SetDateCalculationParameters", { dates: dateArray }, function () {
    //Stuff
});
}

そしてこれがMVCコントローラーのアクションです

public ActionResult SetDateCalculationParameters(string[][] dates)
    {
        //Do stuff

        return Json(true);
    }

コントローラアクションでは、dates配列に12個のアイテムがありますが、それらはすべてnullです。私はこれに数時間いて、困惑しています。これを行う簡単な方法はありますか?それとも私は何かが足りないのですか?

4

2 に答える 2

4

それらをJSONリクエストとして送信できます。

var dateArray = new Array();
dateArray[0] = [ 'foo', 'bar' ];
dateArray[1] = [ 'baz', 'bazinga' ];
// ... and so on

$.ajax({
    url: '@Url.Action("SetDateCalculationParameters", "Event")',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ dates: dateArray }),
    success: function (result) {

    }
});

アクションシグネチャは次のようになります。

[HttpPost]
public ActionResult SetDateCalculationParameters(string[][] dates)
于 2012-07-26T06:22:58.547 に答える
2

同じ問題を解決するために、パラメーターに適用する必要があるJsonModelBinderとJsonModelAttributeを作成しました。

public class JsonModelBinder : IModelBinder
    {
        private readonly static JavaScriptSerializer _serializer = new JavaScriptSerializer();

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];

       if (string.IsNullOrEmpty(stringified))
            return null;

        return _serializer.Deserialize(stringified, bindingContext.ModelType);
    }
}

public class FromJsonAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new JsonModelBinder();
    }
}

コントローラは次のようになります。

public ActionResult SetDateCalculationParameters([FromJson]string[][] dates)

また、配列を文字列化する必要があります。

$.post("/Event/SetDateCalculationParameters", { dates: JSON.stringify(dateArray)}, function () {             //Stuff         });         }

わたしにはできる。

于 2012-07-26T13:01:16.313 に答える