2010-08-17 7 views
0

У меня есть модель, которую я могу связать правильно для отображения, но я не могу опубликовать обновленную версию.ASP.Net MVC привязка модели

Я могу отобразить страницу и ее список содержимого в форме для обновления в строго типизированном виде.

Но когда я отправляю обновленную модель, т. Е. Если я изменил содержимое pagecontents, то опубликованная модель содержит детали Pages, но теряет связь между страницей и pagecontent.

Поэтому, когда я получаю страницу для показа, расширенная страница PageContents содержит правильные деатили.

Но когда я обновляю и размещаю страницуПрограммы, не содержит записи в Странице.

(BTW может быть отвлекающим маневром, но я использую Fluent NHibernate)

К сожалению, я не могу найти то, что мне не хватает.

Так вот сокращенный вариант моего кода:

public class Page 
{ 
    public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual string Title { get; set; } 

    public virtual IList<PageContent> PageContents { get; private set; } 

    public Page() 
    { 
     PageContents = new List<PageContent>(); 
    } 

    public virtual void AddPageContent(PageContent pageContent) 
    { 
     pageContent.Page = this; 
     PageContents.Add(pageContent); 
    } 
} 


public class PageContent 
{ 
    public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual string Description { get; set; } 
    public virtual string Content { get; set; } 
    public virtual Page Page { get; set; } 
} 
Page <%= Html.LabelFor(model => model.Title) %>: 
<%= Html.TextBoxFor(model => model.Title, new { @class = "wide-input" })%> 
<%= Html.ValidationMessageFor(model => model.Title) %> 

Page <%= Html.LabelFor(model => model.Name) %>: 
<%= Html.TextBoxFor(model => model.Name, new { @class = "wide-input" })%> 
<%= Html.ValidationMessageFor(model => model.Name) %> 

<% 
    foreach (var item in Model.PageContents) 
    { 
%> 
     <%= Html.TextAreaFor(m => item.Content) %> 

<% 
    } 
%> 

<p><input type="submit" value="Save" /></p> 

<% } %> 

ответ

1

В основном вам нужно уникальный идентификатор для каждого элемента списка. Что-то вроде

<input id="PageContents_0_Content" name="PageContents[0].Content" value="..." /> 

Это может быть сделано путем:

<%= Html.TextBox(string.Format("PageContents[{0}].Content", i), Model.Products[i].Id) %> 

Это это Блогпост:

http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx

Это Блогпост описывает гораздо лучшее решение:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

Он использует собственный метод HTML Helper для инициализации привязок списка.

EDIT: Я понял это, было сосредоточено на коллекции с ASP.NET MVC:

если я изменил pagecontents содержание затем посланной модель содержит детали страниц, но теряет связь между страницей и pagecontent.

Насколько я знаю, MVC не может восстановить эти отношения. Если страница уже содержит PageContent после PostBack, тогда все «отлично». Средства. Ваши коллекции отправлены правильно. Но MVC не имеет представления о вашей ссылке PageContent.Page. Поэтому вам нужно восстановить, если вручную.

EDIT2:

(BTW может быть отвлекающим маневром, но я использую Fluent NHibernate)

Если я интерпретирую, что правильно вы используете модель напрямую связать свои взгляды - правильно?Если это так, я бы предложил создать ViewModels, скопировав все с вашей модели и обратно. Это отменит модель из представления. Ваш ViewModel может предоставить гораздо больше информации, необходимой вашему представлению. См. Шаблон MVVM.

+0

спасибо за ваш ответ - я изменил свой код на следующий <% = Html.TextArea (string.Format ("PageContents [{0}]. Содержимое", i), Model.PageContents [i] .Content)%> но проблема остается прежней. Когда контроллер получает сообщение, страница содержит коллекцию PageContents, которая для всех целей и целей является новой и не содержит ссылки на страницу. –

+0

Да, я спустился по маршруту ViewModel. Я думаю, что я попался в какой-то двойной мысли! –

 Смежные вопросы

  • Нет связанных вопросов^_^