无法在成功

时间:2016-07-14 16:18:26

标签: jquery json asp.net-mvc

我的部分视图已加载到我的页面中,只显示了一个评论框。

我想要做的就是通过NHibernate将这些数据保存到我的数据库中,但最初我想确保数据实际上是在我的控制器上。

型号:

   public class Recommendation : Entity
{
    public virtual int id { get; set; }
    public virtual int CustomerId { get; set; }
    public virtual int BookingId { get; set; }
    public virtual string Recommend { get; set; }

    public virtual IEnumerable<SelectListItem> RecommendList { get; set; }
    public virtual string Comments { get; set; }
}

控制器:

  public class RecommendationController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        Recommendation model = new Recommendation();
        return View(model);
    }

    [HttpPost]
    public JsonResult Save(Recommendation model)
    {
        string data = string.Format("You selected = {0}", model.Comments);
        return new JsonResult { Data = new { userData = data } };
    }

}

查看:

    @model Breaks.Core.Model.Recommendation

<script type="text/javascript">
    var AJAX_URL = '@Url.Action("Save", "Recommendation")';
</script>
   <form id="recommendUsForm">
                    <div class="form-group">
                        @Html.LabelFor(m => m.Comments)
                        @Html.TextBoxFor(m => m.Comments, new { @class = "form-control", Name="Comments", id = "Comments" })

                    </div>


            <button type="button" value="submit" id="save">Submit</button>


            </form>

JavaScript的:

  $(function () {
    $("#save").click(function (e) {
        e.preventDefault();

        var userData = {
            Comments: $('#Comments').val()
        }


        $.ajax({
            type: "POST",
            data: JSON.stringify(userData),
            url: AJAX_URL,
            dataType: 'JSON',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                alert(data);
            }
        });
    });
});

当我点击“提交”按钮时,我确实会弹出警报,这表明我至少获得了成功,但警报中的信息只是“您选择了=”并且评论中没有文字框。

我错过了什么?为什么不回发数据?

谢谢,

编辑:我的代码的最新更改仍然出错。 我现在得到的错误是“已经添加了具有相同密钥的项目。”

2 个答案:

答案 0 :(得分:0)

JS对象中的属性名称与C#代码中的模型不匹配,因此ModelBinder无法实现它的魔力。将userComment更改为Comments,假设您只想绑定到模型的那个属性,如下所示:

var userData = {
    Comments: $('#Comments').val()
}

答案 1 :(得分:0)

假设您要保存其余的模型数据,您可以序列化表单数据并让ModelBinder完成剩余的工作。

 $.ajax({
     type: "POST",
     data: $('#recommendUsForm').serialize(),
     url: AJAX_URL,
     success: function (data) {
         alert(data);
     }
 });