ASP.NET MVC 2.0: простое связывание моделей не работает / связывание как должно - PullRequest
1 голос
/ 01 марта 2010

ASP.NET MVC 2.0: привязка простой модели не работает / привязка, как следует

У меня есть простое пользовательское имя объекта Comment (сгенерированное linq to sql), оно имеет различные значения, но только два значения отправляются из HTML POST от моего действия, и вот мое действие, которое принимает их .. .

 Function InsertComment(ByVal Comment As Comment) As ActionResult  
              ' both CommentForPicID As Integer and Comment As String are the two values sent.

 End Function

Текстовая область названа с использованием TextAreaFor и скрытого идентификатора с HiddenFor, и я проверил, чтобы убедиться, что имена свойств моего объекта Comment точно (case и all) соответствуют значениям HTML ID / Name элементов FORM, оба являются CommentForPicID и Comment без префиксов.

У меня есть точка останова на моем действии, чтобы увидеть, что происходит. Когда мое действие получает его, объект Comment всегда устанавливается на Ничто во всем действии, и в конечном итоге выдается исключение, когда я пытаюсь использовать нулевое значение. объект.

Я прочитал раздел привязки модели MVC Стивена Сандерсонса, все должно быть в порядке, у кого-нибудь есть идеи?

. , .

Дополнительная информация ( чтение не требуется ): Однако интересно то, что если я оберну объект Comment в родительский объект, скажем, CommentsParent, содержит некоторые вещи и объект Comment в качестве переменных ... тогда я, конечно, изменю идентификаторы элементов формы с соответствующими префиксами, тогда работает как предписано ... но я сделал это только для того, чтобы проверить работоспособность привязки, и не хочу / не нужно делать это для моего приложения.

Вот разметка для тех, кто хочет ее увидеть:

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of FP.Comment)" %>

<%@ Import Namespace="FP" %>

<%--The line below is a workaround for a VB / ASPX designer bug--%>
<%=""%>
<% Html.EnableClientValidation()%>

<% Using Ajax.BeginForm("InsertComment", "Home", New AjaxOptions With {.UpdateTargetId = "InsertComment", .HttpMethod = FormMethod.Post})%>

   <%= Html.HiddenFor(Function(x) x.CommentForPicID)%>

   <%= Html.TextAreaFor(Function(x) x.Comment, 8, 40, New With {.style = "overflow: hidden;"})%><br />

   <%= Html.ValidationMessageFor(Function(x) x.Comment)%>


  <input type="submit" value="Save" name="SaveCancelButton"/>
  <input type="submit" value="Cancel" name="SaveCancelButton" />

<% End Using %>

1 Ответ

5 голосов
/ 01 марта 2010

Проблема в том, что ваш класс модели называется Comment, а внутри у вас есть строковое свойство, также называемое Comment, которое вы пытаетесь связать с текстовой областью.Это не работает, поскольку переплет становится запутанным.Либо используйте префикс связывания , либо переименуйте свойство или класс, чтобы они отличались.

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