【问题标题】:Ajax Post: ASP.NET MVC action is receiving empty objectAjax 帖子:ASP.NET MVC 操作正在接收空对象
【发布时间】:2016-08-07 05:37:40
【问题描述】:

我有这个表格:

@model CupCakeUI.Models.CupCakeEditViewModel
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createFrm" }))
{
    <div class="form-group">
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            <input  type="text" id="Name" name="Name" value="@Model.Name" />
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model)
        </div>
        <div class="editor-field">
            <input type="text" id="Price" name="Price" value="@Model.Price" />
        </div>
        <div class="col-md-offset-2 col-md-10">
            <input type="button" id="btnCreate" value="Create" class="btn btn-default" />
        </div>
    </div>
}

我正在尝试使用 ajax post 将数据发送到 Action 方法,但是它总是接收空对象。我过去做过几次,现在我尝试了不同的方法,但不起作用,代码:

$(document).ready(function () {
    $("#btnCreate").click(function () {
        var name = $("#Name").val();
        var price = $("#Price").val();
        var cupCakeEditModel = { "CupCakeId": 0, "Name": name, "Price": price };
        var json = JSON.stringify(cupCakeEditModel);
        $.ajax({
            type: 'POST',
            url: "/CupCake/Create",
            data: JSON.stringify(cupCakeEditModel),
            contentType: 'application/json',
            success: function () {
                alert("succes");
            },
            error: function () {
                alert("error");
            }
        });
    })
})

它在记录时在控制台中显示:

这是使用的动作方法和类:

[HttpPost]
public JsonResult Create (CupCakeUI.Models.CupCakeEditViewModel cupCakeEditModel)
{
    var cupCake =  
    CupCakeData.Save(cupCakeEditModel);
    return Json("cupCake", 
    JsonRequestBehavior.AllowGet);
 }

这个类:

public class CupCakeEditViewModel
{
    public int CupCakeId;
    [Display(Name = "CupCake Name")]
    public string Name;
    public string Price;
}

我也用过这个,但是没用:

$("#btnCreate").click(function () {
    var cupCakeEditModel = 
    $("#createFrm").serialize();
    $.ajax({
        url: "/CupCake/Create",
        type: "POST",
        data: cupCakeEditModel,
        success: function (response) {
            alert("Success");
        },
        error: function (response) {
        }
    });
})

我在论坛上找到了几个答案,但似乎很奇怪!

【问题讨论】:

  • 显示您的模型。 (不相关,但您应该使用 @Html.TextBoxFor(m =&gt; m.Name) 等)而不是手动创建 html)
  • 是的@StephenMuecke,我正在使用它,但我已经更改了所有内容以使其正常工作,这就是我修改所有内容的原因。
  • 我使用 Action Method 将类模型插入到 Code Snippet 中

标签: ajax asp.net-mvc asp.net-mvc-partialview


【解决方案1】:

您的模型仅包含字段,DefaultModelBinder 不绑定字段,仅绑定属性。将模型更改为

public class CupCakeEditViewModel
{
    public int CupCakeId { get; set; }
    [Display(Name = "CupCake Name")]
    public string Name { get; set; }
    public string Price { get; set; }
}

【讨论】:

  • 哇!我错过了。我从来没有看过它。
  • 附带说明,您的第二个选项(使用.serialize() 更好,代码更少),您真的应该使用url: '@Url.Action("Create", "CupCake")' 以确保生成的网址始终正确。
  • 是的,当然。还是谢谢。
猜你喜欢
  • 2019-11-08
  • 2019-07-21
  • 2018-10-29
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2015-09-18
  • 2011-07-24
  • 2017-12-31
相关资源
最近更新 更多