Работает ли привязка модели MVC 2.0 к запросам Ajax? - PullRequest
5 голосов
/ 23 февраля 2010

Я просто отправляю обычный запрос POST, используя Ajax.BeginForm ... Я выводю элементы формы, используя .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) %>

вот метод действия, который вызывает ошибку ... ошибка - исключение нулевой ссылки, когда я пытаюсь использовать объект:

 Function UpdateComment(ByVal UpCom As Comment) As ActionResult

Dim db = Новый FPicDataContext Dim Updatable = (из c в db.Comments, где c.CommentID = UpCom.CommentID) .FirstOrDefault Updatable.Comment = UpCom.Comment 'ЭТО ТАМ, ГДЕ ОБЪЕКТ ОБНОВЛЕН ОШИБКА! В основном, все значения в UPCOM (в качестве комментария) равны 0 или ничто. db.SubmitChanges ()

Dim cm = Новая модель комментария с {.Comment = UpCom, .CommentDivId = "CommentDiv" & UpCom.CommentID.ToString}

Возврат PartialView («Комментарий», см)

Функция завершения

Ответы [ 3 ]

2 голосов
/ 23 февраля 2010

эта проблема, которую я в итоге решил, оказалось, что имя объекта, с которым связана модель в аргументе действия, должно совпадать с именем объекта, которое вы использовали при выполнении TextBoxFor BeginForm и т. Д. ... проверено, подтверждено, что это было!

поэтому, другими словами, вместо UpCom должно было быть указано Comment :).

однако, предостережение, я не слышал об этом требовании нигде, в какой-либо документации или чем-либо еще !! у кого-нибудь есть мысли по этому поводу?

1 голос
/ 20 мая 2011

@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)

и распечатайте поля внутри таблицы. Я получал хиты обратно в Action каждый раз, когда я отправляю сообщения, но, как вы сказали, объект был нулевым:

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

Как вы объяснили, все это было в названии, но я хочу уточнить, что это имя лямбда-выражения, которое вы связываете в полях. Когда я изменил его на:

foreach ( var Finding in Model.Findings ) /* Does Work */
.
.
.
<td> <%: Html.TextAreaFor(m => Finding.Description)%> </td>

ModelBinding автоматически все понял. Я совершенно новичок в использовании включенной функциональности ms ajax и довольно плохо знаком с mvc, но это помогло. Спасибо!

1 голос
/ 23 февраля 2010

Подождите, я думаю, я вижу, что вы пытаетесь сделать сейчас, и ответ - да, абсолютно.

Существует пара плагинов jQuery, которые можно использовать для публикации форм с использованием Ajax.

Я использовал этот, и он отлично работает. Плагин jQuery Form Этот также может работать для вас. .submit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...