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

时间:2010-02-23 02:22:03

标签: c# .net asp.net asp.net-mvc vb.net

我只是使用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)

结束功能

3 个答案:

答案 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的新手,但这有所帮助。谢谢!