2010-02-23 70 views
5

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

回答

2

我最終解決了這個問題,結果是模型在動作參數中綁定的對象名稱必須與您在執行TextBoxFor BeginForm等時使用的對象名稱相同的名稱......測試,確認,就是這樣!

所以,換句話說,UpCom必須命名爲Comment而不是:)。但是,請注意,在任何地方,任何文檔或任何東西我都沒有聽說過這個要求!任何人對此有任何想法?

+2

爲什麼任何人都會投票給我們一個答案,當時我們爲任何可能發現它有用的人提供了答案,我本來可以說什麼都沒有,以這種方式離開它,它不會給我提供答案。我認爲SO有很多程序員勢利的人,在試圖在他人生活的其他方面看上去優於其他人時試圖貶低別人,在60個問題之後,我看到了這一切真的,過分地討厭程序員,他們只是充滿了自己。這對一般程序員來說有什麼意義?好奇! – 2010-10-29 22:17:53

1

等待我想我明白你現在要做的事情,答案是絕對的。

有幾個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

1

@ 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

相關問題