C# 获取Json控制器方法的参数

C# 获取Json控制器方法的参数,c#,asp.net-mvc,json,C#,Asp.net Mvc,Json,我正在尝试获取ViewModel并将其传递给Json方法,方法如下: 我认为: <input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" /> 在调试时,我发现我的svm是空的。我试图用一个字符串参数替换它,并在我的视图中对值进行硬编码,这是可行

我正在尝试获取ViewModel并将其传递给Json方法,方法如下:

我认为:

<input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" />
在调试时,我发现我的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>
@model AstellasSchedulerV2.Models.SuggestionViewModel
@使用(Html.BeginForm(“NewAppointment”、“Home”、FormMethod.Post、new{@id=“form_validateapointment”}))
{
@Html.Hidden(“stringParam”,“字符串参数”)
补丁Anti-douleur Corps@Html.CheckBoxFor(s=>s.PADC,新的{@class=“checkbox”,@id=“chbxPADC”})

修补程序Anti-douleur-Pied@Html.CheckBoxFor(s=>s.PADP,new{@class=“checkbox”,@id=“chbxPADP”})
} $(文档).ready(函数(){ $(“#单击我”)。单击(函数(){ var o=新对象(); o、 PADC=$(“#chbxPADC”).val(); o、 PADP=$(“#chbxPADP”).val(); jQuery.ajax({ 类型:“POST”, url:“@url.Action(“GetJson”)”, 数据类型:“json”, contentType:“应用程序/json;字符集=utf-8”, 数据:JSON.stringify(o), 成功:函数(data){alert(data.PADC);}, 失败:函数(errMsg){alert(errMsg);} }); });
  • 不能将复杂对象作为参数发布
  • 如果想要得到json结果,应该调用ajax请求
  • 您应该在ajax请求中发布您的模型。(您可以使用jquery.ajax metod),因为如果您使用
    location.href

  • 不能将复杂对象作为参数发布
  • 如果想要得到json结果,应该调用ajax请求

  • 您应该在ajax请求中发布您的模型。(您可以使用jquery.ajax metod),因为如果您使用
    location.href

    则无法从controller action metod获取值。下面是解决方案,假设您的viewmodel是这样的-

    public class SuggestionViewModel
    {
        public bool PADC { get; set; }
        public bool PADP { get; set; }
    }
    
    然后您可以通过以下方式获得一个视图。在这里,我使用JQuery向GetJson控制器操作发出POST请求。我构建了一个JavaScript对象,然后将其序列化为Json。最后将Json字符串传递给控制器操作

    <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>
    
    当您使用断点检查参数时,将传递参数-

    作为响应,您将获得以下输出-


    解决方案来了,假设您的viewmodel是这样的-

    public class SuggestionViewModel
    {
        public bool PADC { get; set; }
        public bool PADP { get; set; }
    }
    
    然后您可以通过以下方式获得一个视图。在这里,我使用JQuery向GetJson控制器操作发出POST请求。我构建了一个JavaScript对象,然后将其序列化为Json。最后将Json字符串传递给控制器操作

    <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>
    
    当您使用断点检查参数时,将传递参数-

    作为响应,您将获得以下输出-


    谢谢你的回答,但我对所有这些东西都很陌生。请你看一下拉法埃尔·阿尔特豪斯发布的解决方案的第二部分,好吗?我想这样做,但不幸的是,这两部分都不起作用(我已经发布了解释)。谢谢你的回答,但我对所有这些东西都很陌生。你能看一下拉法埃尔·阿尔特豪斯发布的解决方案的第二部分吗?我想这样做,但不幸的是,它也不起作用(我已经发布了解释)。谢谢,这似乎是一个严肃的解决方案!但是,有一个小问题:我如何将我的ViewModel传递到“o”?这里您已经硬编码了,但我如何“动态”执行它?@Traffy您可以使用JQuery获取输入元素的值,例如,您有一个id为=“txt1”的输入文本,然后您可以在JQuery中获取其值,如
    $(“#txt1”).val()
    。然后您可以在代码中动态构造对象并将其发送到服务器。我想差不多完成了。当我按照您所说的那样做时(使用
    $(“#txt1”).val()
    ),即使不是,也总是正确的。抱歉,你知道吗?:/当我检查html源代码时,它显然是错误的…@Traffy,我用你的确切要求更新了我的答案:-)。它是有效的,请不要忘记将其标记为答案。如果可能的话,请向上投票:-)。谢谢,这似乎是一个严肃的解决方案!但是,有一个小问题:我如何将我的ViewModel传递到“o”?这里您已经对其进行了硬编码,但我如何“动态地”执行它“?@Traffy您可以使用JQuery获取输入元素的值,例如,您有一个id为=“txt1”的输入文本,然后您可以在JQuery中获取其值,如
    $(“#txt1”).val()
    。然后您可以在代码中动态构建对象并将其发送到服务器。我想差不多完成了。当我按照您所说的那样做时(使用
    $(“#txt1”).val()
    ),即使不是,也总是正确的。抱歉,你知道这一点吗?:/当我检查html源代码时,它显然是错误的…@Traffy,我用你的确切要求更新了我的答案:-)。如果有效,请不要忘记将其标记为答案。如果可能,请投赞成票:-)。
        public JsonResult GetJson(SuggestionViewModel svm)
        {
            return Json(svm, JsonRequestBehavior.AllowGet);
        }