c# - 获取 Json Controller 方法的参数

标签 c# asp.net-mvc json

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

在我看来:

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

在我的 Controller 中:

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

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

有什么想法吗?

编辑:编辑代码以使用 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>

最佳答案

这是解决方案,假设您以这种方式拥有 View 模型 -

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

然后你有一个 View 在下面的方式。这里我使用 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>

当你点击按钮时,它会点击下面的 Controller -

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

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

enter image description here

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

enter image description here

关于c# - 获取 Json Controller 方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23513015/

相关文章:

c# - 如何制作 Firefox 附加组件

asp.net-mvc - 用户访问网站时记录 MVC

javascript - 本地 JSON 文件更新

ruby-on-rails - 新的 Rails 3,带有 json 响应的 ajax 请求

java - 如何从字符串或 json 对象中搜索并打印特定内容

c# - 我应该如何设置用户控件来触发其子项的事件,就好像它们是它自己的一样?

c# - asp.net - Web API 2 单页应用程序 - 使用内置登录表单未授权?

c# - 用于有条件地获取列表项索引的 Lambda 表达式

javascript - 如何在 html.actionlink 中仅调用 javascript 函数

asp.net-mvc - 默认页面重定向到登录 - MVC 4