我只是使用Ajax.BeginForm发送一个正常的POST请求...我使用.TextBoxFor和.HiddenFor等输出表单元素...所有我应该......当它通过ajax发布到我的动作方法,动作方法中的对象(名为“注释”)没有填充值!
我错过了什么吗?这是我的代码的相关部分给那些想要看到它的人......
<% Using Ajax.BeginForm("UpdateComment", "Home",
New AjaxOptions With {.UpdateTargetId = Model.CommentDivId,
.HttpMethod = FormMethod.Post})%>
和....
<%= 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) %>
这是Action方法,它引发了错误...当我尝试使用该对象时,错误是一个空引用异常:
Function UpdateComment(ByVal UpCom As Comment) As ActionResult
Dim db = New FPicDataContext Dim Updatable =(来自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”&amp; UpCom.CommentID.ToString}
返回PartialView(“评论”,cm)
结束功能
答案 0 :(得分:2)
我最终解决了这个问题,结果是模型绑定到action参数的对象名称必须与你在做TextBoxFor BeginForm时使用的对象名相同...测试,确认,就是这样! / p>
所以换句话说,UpCom
必须改名为Comment
:)。
然而,请注意,我没有在任何地方,任何文件或任何事情中听说过这个要求!有人对此有什么想法吗?
答案 1 :(得分:1)
等等我想我现在正在尝试做什么,答案是绝对的。
您可以使用几个jQuery插件来允许使用Ajax发布表单。
我用过这个,它运行正常。 jQuery Form Plugin 这个也可能适合你。 .submit
答案 2 :(得分:1)
@ Erx_VB.NExt.Coder我回答了这一点,因为我偶然发现了其他东西并最终遇到了同样的问题,但措辞并不是最清楚,所以我想更新并尝试提供帮助。在我的例子中,我通过
遍历Findings对象foreach ( var row in Model.Findings ) /* Doesn't Work */
.
.
.
<td> <%: Html.TextAreaFor(m => row.Description)%> </td>
和我的控制员:
public void Update(ReportFindingViewModel Finding)
并在表格内打印字段。每当我发布时,我都会回击动作,但就像你说的那样,对象是空的:
<%: Ajax.BeginForm("Update", "ReportFinding", new AjaxOptions { HttpMethod = "Post" } )%>
正如您所解释的那样,这一切都在名称中,但我想澄清的是,它是您在字段中绑定的lambda表达式的名称。当我把它改为:
foreach ( var Finding in Model.Findings ) /* Does Work */
.
.
.
<td> <%: Html.TextAreaFor(m => Finding.Description)%> </td>
ModelBinding自动神奇地想出了这一切。我完全不习惯使用包含的ms ajax功能,并且完全是mvc的新手,但这有所帮助。谢谢!