ASP.NET MVC2 ORDER / ORDER LINE (Master / Detail) View - как все связать - PullRequest
0 голосов
/ 09 января 2011

Я создал эту форму: (код ниже)

Order Header
Order Item List
Order Payment List
Order Summary

Я заполняю список, используя Стив Сандерсон метод (jquery)

Когда яотправив форму я получаю только поля заголовка.Как я могу связать 2 поля списков с моделью (порядок внутри модели представления содержит перечисление для этого списка, и он используется для их заполнения. Мне нужен способ отправить их обратно плюс добавленные строки обоихlist.

вот код страницы:

   <h2>
        <%: Html.Label(Model.order.OrderID.ToString()) %></h2>
    <% using (Html.BeginForm("EditOrder", "Orders", FormMethod.Post, Model))
       {%>
    <%: Html.ValidationSummary(true)%>
    <fieldset>
        <legend>OrderDetails</legend>
        <div>
            <%: Html.Label("Order Date: ")%>
            <%: Html.TextBoxFor(o => o.order.OrderDate)%>
        </div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
    <fieldset>
        <legend>Order Items:</legend>
        <div id="editorRows">
            <% foreach (var item in Model.order.ItemsInOrders)
               {
                   Html.RenderPartial("ItemEditorRow", item);
                   Html.Display("<br/>");
               }
            %>
        </div>
        <%= Html.ActionLink("Add...", "BlankItemRow", null, new { id = "addItem" }) %>
    </fieldset>
    <fieldset>
        <legend>Order Activities:</legend>
  <div id="ActivityRows">
        <% foreach (var item in Model.order.ActivityInOrders)
           {
               Html.RenderPartial("ActivityEditorRow", new TechRun.UI.Models.OrderActivityViewModel { activity = item, activitiesList = Model.activities });
               Html.Display("<br/>");
           }
        %>
    </div>
        <%= Html.ActionLink("add...", "BlankActivityRow", null, new { id = "addItem2" })%>
    </fieldset>
    <fieldset>
        <legend>Order Summary:</legend>
    </fieldset>
    <%} %>

РЕДАКТИРОВАТЬ: ОБНОВЛЕНО:

Вот частичное представление:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TechRun.Shared.ItemsInOrder>" %>
<%@ Import Namespace="TechRun.UI.HtmlHelpers"%>
<div class="editorRow">
    <% using (Html.BeginCollectionItem("items"))
       { %>
        ID: <%: Html.TextBoxFor(x => x.ItemID)%>      
        ITEM: <%: Html.TextBoxFor(x => x.ItemDescription) %> 
        PRICE: <%: Html.TextBoxFor(x => x.CostOfItem, new { size = 4 }) %> 
        NUME: <%: Html.TextBoxFor(x => x.NumOfItems, new { size = 4 }) %>
        DatE: <%: Html.TextBoxFor(x => x.SupplyDate) %>
        Total: <%: Html.Label((Model.CostOfItem * Model.NumOfItems).ToString())%>
        <!-- This might be wrong -->
        <%: Html.HiddenFor(x=>x.TotalCost,Model.CostOfItem * Model.NumOfItems) %>
        <%: Html.HiddenFor(x=>x.OrderID, Model.OrderID) %>
    <% } %>

</div>
 <br />

И другой Генератор строк:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TechRun.UI.Models.OrderActivityViewModel>" %>
<div class="ActivityRows">
    <% using (Html.BeginCollectionItem("activities"))
       { %>
    <% IEnumerable<SelectListItem> myActivityList = null;
           if(Model.activitiesList != null) 
           {
               myActivityList = Model.activitiesList.Select(o => new SelectListItem
                {
                    Text = o.ActivityID +
                     " - " + o.ActivityName + " Price: " + o.Cost + " TIME: " + o.ActivityTimeHours,
                    Value = o.ActivityID.ToString(),
                    Selected = (o.ActivityID == Model.activity.ActivityID)
                });
           }
           else return ; %>
    ID:
    <%: Html.DropDownListFor(x => x.activity.ActivityID, myActivityList)%>

    PRICE:
    <%: Html.TextBoxFor(x => x.activity.Cost, new { size = 4 })%>
    TIME:
    <%: Html.TextBoxFor(x => x.activity.TimeHours, new { size = 4 })%>
    NUM:
    <%: Html.TextBoxFor(x => x.activity.Items)%>
    TOTAL:
    <%: Html.Label((Model.activity.Items * Model.activity.Cost).ToString())%>
    <%: Html.HiddenFor(x => x.activity.Total, Model.activity.Cost * Model.activity.Items)%>
    <%: Html.HiddenFor(x => x.activity.OrderID, Model.activity.OrderID)%>
    <% } %>
</div>
<br />

И ... префикс Генерация кодирования - скопирован с здесь

1 Ответ

0 голосов
/ 22 марта 2011

Ваши строки Html.BeginCollectionItem (" items ") должны быть что-то вроде Html.BeginCollectionItem ( " order.ItemsInOrders ")

где параметр - это имя свойства, содержащего элементы.

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

public xxxx order_ItemsInOrders
{
    get { return order.ItemsInOrders; }
    set { xxxx }  // may not bee needed
}

, а затем

<div id="editorRows">
    <% foreach (var item in Model.order_ItemsInOrders)
       {
           Html.RenderPartial("ItemEditorRow", item);
           Html.Display("<br/>");
       }
    %>
</div>

также ItemsInOrders или ItemsInOrders должны быть разграничены как свойство.

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