ASP.NET MVC - модель с набором, не заполняющим на обратной передаче

Скачать

wget http://security.ubuntu.com/ubuntu/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4_amd64.deb

Установить lib с помощью dpkg

sudo dpkg -i libgcrypt11_1.5.3-2ubuntu4_amd64.deb

Установить StarUML с помощью dpkg

sudo dpkg -i StarUML-v2.8.0-64-bit.deb
10
задан Shimmy 7 May 2013 в 14:39
поделиться

5 ответов

Я думаю, что ваша модель слишком сложна для работы с привязкой модели по умолчанию. Вы можете попробовать использовать несколько параметров и связать их с префиксами:

public ActionResult Create( 
    Person person,
    [Bind(Prefix="Person.PersonDetails")]
    PersonDetails details,
    [Bind(Prefix="Person.PersonDetails.ContactInformation")] 
    ContactInformation[] info )
{
      person.PersonDetails = details;
      person.PersonDetails.ContactInformation = info;

      ...
}

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

21
ответ дан 3 December 2019 в 15:53
поделиться

Если свойство имеет значение NULL, тогда другой связыватель модели не может его найти или не может найти значения в представленной форме, необходимые для создания экземпляра типа свойства. Например, если свойство имеет идентификатор, не допускающий значения NULL, и ваша форма не содержит данных для этого идентификатора, связыватель модели оставит свойство как нулевое, так как он не может создать новый экземпляр типа, не зная идентификатора.

Другими словами, чтобы диагностировать эту проблему, вы должны тщательно сравнить данные в отправленной форме (это легко увидеть с помощью Firebug или Fiddler) со структурой объекта, который вы ожидаете заполнить связывателем модели. Если какие-либо обязательные поля отсутствуют или значения представлены таким образом, что они не могут быть преобразованы в тип обязательного поля, то весь объект останется пустым.

если свойство имеет идентификатор, не допускающий значения NULL, и ваша форма не содержит никаких данных для этого идентификатора, связыватель модели оставит свойство как null, так как он не может создать новый экземпляр типа, не зная идентификатора.

В другом случае Другими словами, чтобы диагностировать эту проблему, вы должны внимательно сравнить данные в представленной форме (это легко увидеть с помощью Firebug или Fiddler) со структурой объекта, который вы ожидаете заполнить связывателем модели. Если какие-либо обязательные поля отсутствуют или значения представлены таким образом, что они не могут быть преобразованы в тип обязательного поля, то весь объект останется пустым.

если свойство имеет идентификатор, не допускающий значения NULL, и ваша форма не содержит никаких данных для этого идентификатора, связыватель модели оставит свойство как null, так как он не может создать новый экземпляр типа, не зная идентификатора.

В другом случае Другими словами, чтобы диагностировать эту проблему, вы должны внимательно сравнить данные в представленной форме (это легко увидеть с помощью Firebug или Fiddler) со структурой объекта, который вы ожидаете заполнить связывателем модели. Если какие-либо обязательные поля отсутствуют или значения представлены таким образом, что они не могут быть преобразованы в тип обязательного поля, то весь объект останется пустым.

чтобы диагностировать эту проблему, вы должны внимательно сравнить данные в отправленной форме (это легко увидеть с помощью Firebug или Fiddler) со структурой объекта, который вы ожидаете заполнить связывателем модели. Если какие-либо обязательные поля отсутствуют или значения представлены таким образом, что они не могут быть преобразованы в тип обязательного поля, то весь объект останется пустым.

чтобы диагностировать эту проблему, вы должны внимательно сравнить данные в отправленной форме (это легко увидеть с помощью Firebug или Fiddler) со структурой объекта, который вы ожидаете заполнить связывателем модели. Если какие-либо обязательные поля отсутствуют или значения представлены таким образом, что они не могут быть преобразованы в тип обязательного поля, то весь объект останется пустым.

5
ответ дан 3 December 2019 в 15:53
поделиться

I've been struggling with this same type of scenario and eventually came to realize that the underlying problem is that the MVC default model binder does not seem to work on EntitySet fields, only List fields. I did however find a simple workaround that seems acceptable. In my case, I have a Company entity that has one to many relationship to Contacts (my Linq-to-Sql EntitySet).

Since it seems that when I change my code from EntitySet to List, the MVC default model binder starts working as expected (even though the LTS isn't now), I figured I would provide an alternate, "aliased" property to MVC that is of type List, and sure enough, this seems to work.

In my Company entity class:


// This is what LINQ-to-SQL will use:
private EntitySet<Contact> _Contacts = new EntitySet<Contact>();
[Association(Storage="_Contacts", OtherKey="CompanyID", ThisKey="ID")]
public EntitySet<Contact> Contacts
{
    get { return _Contacts; }
    set { _Contacts.Assign(value); }
}

// This is what MVC default model binder (and my View) will use:
public List<Contact> MvcContacts
{
    get { return _Contacts.ToList<Contact>(); }
    set { _Contacts.AddRange(value); }
}

So now, in my View, I have the following:


<метка> Фамилия *
 <% = Html.TextBox ("Company.MvcContacts [" + i + "] .LastName")%>

Кажется, работает как шарм!

Удачи! -Майк

1
ответ дан 3 December 2019 в 15:53
поделиться

Возможно отсутствие атрибута Bind является случаем:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create ([Bind] Person person)
{
// Do stuff to validate and add to the database 
}
0
ответ дан 3 December 2019 в 15:53
поделиться

Первый аргумент Html.TextBox - это имя текстового поля, второй - его значение.

«Неверно»:

<%= Html.TextBox("person.PersonDetails.ContactInformation[0].Data")%>

«Верно»:

<%= Html.TextBox("nameoftextbox", person.PersonDetails.ContactInformation[0].Data)%>
0
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: