C# MVC2.0模型绑定可以处理Ajax请求吗?

C# MVC2.0模型绑定可以处理Ajax请求吗?,c#,.net,asp.net,asp.net-mvc,vb.net,C#,.net,Asp.net,Asp.net Mvc,Vb.net,我只是用Ajax.BeginForm发送一个普通的POST请求。。。我使用.TextBoxFor和.HiddenFor等输出表单元素。。。尽管我应该。。。当它通过ajax发布到我的action方法时,action方法中的对象(名为“Comment”)没有填充值 我错过什么了吗?这里是我的代码的相关部分,给那些想看它的人 <% Using Ajax.BeginForm("UpdateComment", "Home", New AjaxOptions With {.UpdateTar

我只是用Ajax.BeginForm发送一个普通的POST请求。。。我使用.TextBoxFor和.HiddenFor等输出表单元素。。。尽管我应该。。。当它通过ajax发布到我的action方法时,action方法中的对象(名为“Comment”)没有填充值

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

<%  Using Ajax.BeginForm("UpdateComment", "Home",
    New AjaxOptions With {.UpdateTargetId = Model.CommentDivId,
    .HttpMethod = FormMethod.Post})%>
Dim db=新的FPicDataContext Dim Updatable=(来自db.Comments中的c,其中c.CommentID=UpCom.CommentID)。FirstOrDefault updateable.Comment=UpCom.Comment'这是引发对象为NULL错误的地方!基本上,UPCOM中的所有值(作为注释)都是0或零。 db.SubmitChanges()

Dim cm=带有{.Comment=UpCom、.CommentDivId=“CommentDiv”&UpCom.CommentID.ToString}的新CommentModel

返回部分视图(“注释”,cm)


结束函数

等等,我想我知道你现在想做什么了,答案是肯定的

有几个jQuery插件可以让您使用Ajax发布表单

我用过这个,效果很好。
这个可能也适合你

我最终解决了这个问题,结果是模型绑定到实际参数中的对象名必须与您在执行TextBoxFor BeginForm等时使用的对象名相同。。。测试,确认,就是这样

因此,换句话说,
UpCom
必须命名为
Comment
:)


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

@Erx_VB.NExt.Coder我告诉你了,因为我在寻找其他东西时偶然发现了这一点,并最终遇到了相同的问题,但措辞不是最清晰的,所以我想更新并尝试帮助你。在我的示例中,我通过

foreach ( var row in Model.Findings )  /* Doesn't Work */
.
.
.
<td> <%: Html.TextAreaFor(m => row.Description)%> </td>
并在表中打印字段。无论何时发布,我都会收到对操作的回击,但正如您所说,对象为空:

<%: Ajax.BeginForm("Update", "ReportFinding", new AjaxOptions { HttpMethod = "Post" } )%>

正如您所解释的,这一切都在名称中,但我想澄清的是,这是您在字段中绑定到的lambda表达式的名称。当我把它改成:

foreach ( var Finding in Model.Findings ) /* Does Work */
.
.
.
<td> <%: Html.TextAreaFor(m => Finding.Description)%> </td>
foreach(Model.Findings中的var查找)/*确实有效*/
.
.
.
查找。说明)%>

ModelBinding自动神奇地解决了所有问题。我对使用附带的ms ajax功能是完全陌生的,对mvc也是相当陌生的,但这很有帮助。谢谢

我本以为这也行???请使用POST action方法代码和视图的HTML输出。您好,我已经用请求的详细信息更新了orig帖子:)我现在正在使用请求(“comment.CommentID”)和请求(“comment.comment”)来获取评论和CommentID,但天哪,这太令人敬畏了,我真的很想按照它的本意去做,以优美优雅的方式!!有什么想法吗?嘿,谢谢你提供的这些信息,不过我会先尝试使用ajax.beginForm(更好的编译时检查)来做这件事,我希望它能像广告中那样工作,否则,如果我不学会如何按照预期的方式去做,我会觉得我错过了一些东西……当vie努力为任何可能觉得有用的人提供答案时,为什么有人会投票反对答案,我可以什么都不说,就这样离开,提供答案对我没有好处。我认为很多程序员势利者也是如此,他们在试图贬低他人的同时,试图表现得比他人优越,以满足他们在生活其他方面的不安全感,在提出了60个问题之后,我发现这一切都是如此真实,过于势利的程序员,他们只是充满了自己。这对程序员来说意味着什么?好奇@senseilhitokiri非常感谢您的详细阐述,我很高兴这是有用的,并投票支持您,以便人们可以看到您的答案,以便进一步澄清:)。另外,如果我没记错的话,我认为mvc不喜欢在父对象和子对象/属性中使用相同的名称,比如我使用了“Comment.Comment”,其中第一个注释是object,第二个是string。
public void Update(ReportFindingViewModel Finding)
<%: Ajax.BeginForm("Update", "ReportFinding", new AjaxOptions { HttpMethod = "Post" } )%>
foreach ( var Finding in Model.Findings ) /* Does Work */
.
.
.
<td> <%: Html.TextAreaFor(m => Finding.Description)%> </td>