如何在视图中序列化模型并传递给控制器​​动作

时间:2017-05-15 21:08:22

标签: json asp.net-mvc serialization

我非常需要在视图中序列化模型,然后在某个时候将其传递给控制器​​操作。我可以通过做几个黑客来让它工作,但它不漂亮。

我的测试控制器操作

    public ActionResult Index()
    {
        DefaultOptionValueRound defaultOptionValueRound = new DefaultOptionValueRound()
        {
            OptionId = 1835,
            OptionValueId = 40343
        };

        TestModel testModel = new TestModel()
        {
            DefaultOptionValueRound = defaultOptionValueRound
        };

        return View(testModel);
    }

视图

@using Common.Repository.Extensions
@model EngA.SandboxApplication.Controllers.TestModel

@Html.Hidden("DefaultOptionValueRound", Html.Raw(Json.Encode(Model.DefaultOptionValueRound)))

<input type="button" value="submit" onclick="SerializeModelTest.processOptionMag()"/>

<script language="javascript">

    SerializeModelTest = {

        processOptionMag: function () {

            //Testing: This Works
            //var defaultOptionValueRound = { OptionId: 1834, OptionValueId: 4034377 }
            //var data = JSON.stringify({ defaultOptionValueRound: defaultOptionValueRound });

            //This Does Not Work
            var defaultOptionValueRound = $("#DefaultOptionValueRound").val();
            var data = { defaultOptionValueRound: defaultOptionValueRound }; //Stringify Does not work either

            $.ajax({
                contentType: 'application/json; charset=utf-8',
                type: "Post",
                cache: false,
                url: '@Url.Action("ProcessOptionMag", "SerializeModelTest")',
                data: data,
                dataType: "json",
                traditional: true,
                success: function(data) {
                    alert(data);
                }
            });
        }
    }

</script>

问题是序列化模型已经以stringify形式返回。

必须有一种优雅的方式来做到这一点,而我不必做JS字符串操作来使其工作。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我发现我可以使用JSON.Parse对结果进行非字符串化,然后使用其他参数重新打包以发送给控制器。

        var defaultOptionValueRound = $("#DefaultOptionValueRound").val();
        var data = JSON.stringify({ defaultOptionValueRound: JSON.parse(defaultOptionValueRound) }); 

现在一切正常。