MVC 2.0模型绑定是否适用于Ajax请求?

Erx*_*der 5 .net c# vb.net asp.net asp.net-mvc

我只是使用Ajax.BeginForm发送一个正常的POST请求...我使用.TextBoxFor和.HiddenFor等输出表单元素...所有我应该......当它通过ajax发布到我的action方法时,动作方法中的对象(名为"注释")没有填充值!

我错过了什么吗?这是我的代码的相关部分给那些想要看到它的人...

<%  Using Ajax.BeginForm("UpdateComment", "Home",
    New AjaxOptions With {.UpdateTargetId = Model.CommentDivId,
    .HttpMethod = FormMethod.Post})%>
Run Code Online (Sandbox Code Playgroud)

和....

    <%= Html.HiddenFor(Function(x) x.Comment.CommentID)%>

 <%= Html.TextAreaFor(Function(x) x.Comment.Comment, 8, 40,
                   New With {.style = "overflow: hidden;"})%>

    <%= Html.ValidationMessageFor(Function(x) x.Comment.Comment) %>
Run Code Online (Sandbox Code Playgroud)

这里是Action方法,它引发了错误...当我尝试使用该对象时,错误是一个空引用异常:

 Function UpdateComment(ByVal UpCom As Comment) As ActionResult
Run Code Online (Sandbox Code Playgroud)

Dim db = New FPicDataContext Dim Updatable =(from c in db.Comments where c.CommentID = UpCom.CommentID).FirstOrDefault Updatable.Comment = UpCom.Comment'这是对象是空的错误被提出!基本上,UPCOM的所有价值(评论中)都是0或者没有.db.SubmitChanges()

Dim cm =新的CommentModel,{.Comment = UpCom,.CommentDivId ="CommentDiv"&UpCom.CommentID.ToString}

返回PartialView("注释",cm)

结束功能

Erx*_*der 2

我最终解决了这个问题,事实证明模型在操作参数中绑定的对象名称必须与您在执行 TextBoxFor BeginForm 等时使用的对象名称相同...经过测试,确认,就是这样!

所以,换句话说,UpCom必须命名Comment:)。

但是,请注意,我没有在任何地方、任何文档或任何内容中听说过此要求!有人对此有什么想法吗?

  • 当我努力为可能觉得有用的人提供答案时,为什么有人会否决答案,我本可以什么也不说,就这样留下来,提供答案对我没有好处。我认为有很多程序员势利小人,他们试图贬低别人,同时试图让自己看起来比别人优越,试图满足他们生​​活中其他方面的不安全感,在 60 个问题之后,我看到了这一切确实,过于势利的程序员只是自以为是。这对一般程序员来说意味着什么?好奇的! (2认同)