MVC 2.0模型绑定是否可以使用Ajax请求?

MVC 2.0模型绑定是否可以使用Ajax请求?

问题描述:

我只是使用Ajax.BeginForm发送一个正常的POST请求...我使用.TextBoxFor和.HiddenFor等输出表单元素...所有我应该...当它通过ajax发布到我的动作方法中,操作方法中的对象(名为“Comment”)未使用值填充!MVC 2.0模型绑定是否可以使用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) %> 

这里是操作方法,这引起了错误...该错误是一个空引用异常当我尝试使用对象:

Function UpdateComment(ByVal UpCom As Comment) As ActionResult 

昏暗分贝=新FPicDataContext 点心可更新=(从c在db.Comments凡c.CommentID = UpCom.CommentID).FirstOrDef ault Updatable.Comment = UpCom.Comment'这是哪里的对象是NULL错误提出!基本上,UPCOM的所有价值(如评论)都是0或者什么都没有。 db.SubmitChanges()

昏暗厘米=新CommentModel借助{的.comment = UPCOM,.CommentDivId = “CommentDiv” & UpCom.CommentID.ToString}

返回PartialView( “注释”,厘米)

End Function

+0

我会期待这个工作! ??? – jwwishart 2010-02-23 02:33:02

+0

请使用您的视图的POST操作方法代码和HTML输出。 – LukLed 2010-02-23 02:56:47

+0

你好,我更新了与请求的详细信息的原始文章:) – 2010-02-23 04:30:35

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

所以,换句话说,UpCom必须命名为Comment而不是:)。但是,请注意,在任何地方,任何文档或任何东西我都没有听说过这个要求!任何人对此有任何想法?

+2

为什么任何人都会投票给我们一个答案,当时我们为任何可能发现它有用的人提供了答案,我本来可以说什么都没有,以这种方式离开它,它不会给我提供答案。我认为SO有很多程序员势利的人,在试图在他人生活的其他方面看上去优于其他人时试图贬低别人,在60个问题之后,我看到了这一切真的,过分地讨厌程序员,他们只是充满了自己。这对一般程序员来说有什么意义?好奇! – 2010-10-29 22:17:53

等待我想我明白你现在要做的事情,答案是绝对的。

有几个jQuery插件可以抓取,这将允许使用Ajax发布表单。

我用过这个,它工作正常。 jQuery Form Plugin 这可能也适合你。 .submit

+0

Jquery.Form很棒。 – jfar 2010-02-23 03:09:32

+0

是的,它很酷。 – griegs 2010-02-23 03:16:08

+2

嘿谢谢你的这个信息,但是我会尝试首先使用ajax.beginForm(更好的编译时间检查)来做到这一点,我希望它会像广告一样工作,否则我认为我错过了一些东西,如果我不我不知道如何按照它的意图去做... – 2010-02-23 04:32:50

@ Erx_VB.NExt.Coder我回复了这个观点,因为我偶然发现了其他的东西,并最终遇到同样的问题,但措辞并不是最清楚的,所以我想更新并尝试提供帮助。在我的例子我遍历一个调查结果经由

foreach (var row in Model.Findings) /* Doesn't Work */ 
. 
. 
. 
<td> <%: Html.TextAreaFor(m => row.Description)%> </td> 

和我的控制器对象:

public void Update(ReportFindingViewModel Finding) 

和打印字段出在表的内部。我得到的点击回到每当我张贴的动作,但就像你说的,对象为null:

<%: 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的新功能,但这有所帮助。谢谢!

+0

@senseilhitokiri非常感谢你的阐述,我很高兴这是有用的,并投票给你,让人们可以看到你的答案进一步澄清:)。另外,如果我正确记住了这个问题,我不认为mvc喜欢它,当你使用父母和子对象/属性相同的名字时,比如我使用了“Comment.Comment”,其中第一个注释是对象,第二个是字符串。 – 2011-07-09 16:50:41