获取Json控制器方法的参数

时间:2014-05-07 08:48:17

标签: c# asp.net-mvc json

我试图将我的ViewModel传递给我的Json方法做这样的事情:

在我看来:

<input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" />

在我的控制器中:

public JsonResult GetNextAppointment(SuggestionViewModel svm)
{
     return Json(svm, JsonRequestBehavior.AllowGet);
    //this is just for testing
}

调试时,我发现我的 svm 为空。我试图用字符串参数替换它,并在我的视图中对值进行硬编码,这很有效。所以,我不太清楚问题出在哪里。

任何想法的人?

编辑:编辑代码以使用jQuery AJAX

我的观点现在是这样的:

@model AstellasSchedulerV2.Models.SuggestionViewModel

<div class="rightPanel">



        @using (Html.BeginForm("NewAppointment", "Home", FormMethod.Post, new { @id = "form_ValidateAppointment" }))
        {
            @Html.Hidden("stringParam","")
            <fieldset>
                <div>
                   Patch Anti-douleur Corps @Html.CheckBoxFor(s => s.PADC, new { @class = "checkbox", @id = "chbxPADC" })
                </div>
                <br />
                <div>
                   Patch Anti-douleur Pied @Html.CheckBoxFor(s => s.PADP, new { @class = "checkbox", @id = "chbxPADP" })
                </div>
                <br />
                <a href="#" id="ClickMe">Click me</a>

            </fieldset>
        }
    </div>

    <script type ="text/javascript">
        $(document).ready(function () {


            $("#ClickMe").click(function () {
                var o = new Object();
                o.PADC = $("#chbxPADC").val();
                o.PADP = $("#chbxPADP").val();

                jQuery.ajax({
                    type: "POST",
                    url: "@Url.Action("GetJson")",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(o),
                    success: function (data) { alert(data.PADC); },
                    failure: function (errMsg) { alert(errMsg); }
                });
            });
    </script>

2 个答案:

答案 0 :(得分:4)

这是解决方案,让我们说你有这样的viewmodel -

public class SuggestionViewModel
{
    public bool PADC { get; set; }
    public bool PADP { get; set; }
}

然后您可以通过以下方式查看视图。在这里,我使用JQuery向GetJson Controller Action发出POST请求。我构造了一个JavaScript对象,然后将其序列化为Json。然后最后将Json字符串传递给Controller Action。

<fieldset>
    <div>
        Patch Anti-douleur Corps @Html.CheckBoxFor(s => s.PADC, new { @class = "checkbox", @id = "chbxPADC" })
    </div>
    <br />
    <div>
        Patch Anti-douleur Pied @Html.CheckBoxFor(s => s.PADP, new { @class = "checkbox", @id = "chbxPADP" })
    </div>
    <br />

</fieldset>

这是JQuery的一部分 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    $(document).ready(function () {
        $("#ClickMe").click(function () {
            var chk = $('#chbxPADC').is(':checked');
            var chk1 = $('#chbxPADP').is(':checked');

            var o = new Object();
            o.PADP = chk1;
            o.PADC = chk;

            jQuery.ajax({
                type: "POST",
                url: "@Url.Action("GetJson")",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(o),
                success: function (data) { alert(data.PADP); },
                failure: function (errMsg) { alert(errMsg); }
            });
        });
    });
</script>
<a href="#" id="ClickMe">Click me</a>

当您点击该按钮时,它会点击以下控制器 -

    public JsonResult GetJson(SuggestionViewModel svm)
    {
        return Json(svm, JsonRequestBehavior.AllowGet);
    }

使用断点检查参数时,将传递参数 -

enter image description here

作为回复,您将获得以下输出 -

enter image description here

答案 1 :(得分:1)

  1. 您不能将复杂对象作为参数发布。
  2. 如果你想获得json结果,你应该调用ajax请求。
  3. 您应该在ajax请求中发布模型。 (您可以使用jquery .ajax metod),因为如果使用location.href

    ,则无法从控制器操作metod获取值