none
Работа со моделью в таблице RRS feed

  • Вопрос

  • Уважаемые, знатоки!
    Снова беззастенчиво спрашиваю и пытаюсь напрячь занятых людей. Простите, но хочу признаться что тут дейстивительнно нахожу помощь и внятные объяснения.
    Итак вопрос:

    Пишу в MVC ASPNET
    У меня есть LIST определенного класса который я показываю во View в обычной таблице <table>, пользуясь темплейтом - EditorTemplates

    Работает все замечательно. Задачи две :
    1.  надо во первых добавить еще одну строку (пустую) и я это делаю через Partial
    2 на каждой строке есть кнопка дублирования этой строки. И при нажатии на нее я бы хотел под выбранной строкой сгенерировать такую же.

    Загвоздка в том что у меня ни в первой ни во второй задачи не получается увидеть сгенерированныей строки при операции Пост
    Буду очень благодарен за помощь.
    26 августа 2013 г. 6:53

Ответы

  • "1.  надо во первых добавить еще одну строку (пустую) и я это делаю через Partial" - если её надо добавить в таблицу, то смысла отдельное частичное представление делать нет. Просто добавьте его в список используя который вы рендерите таблицу.

    "2 на каждой строке есть кнопка дублирования этой строки. И при нажатии на нее я бы хотел под выбранной строкой сгенерировать такую же." - а вот для копирования не нужно отпралять форму обратно. Можете использовать jQuery и копировать строку на клиенте. Например используя метод clone.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:28
    • Помечено в качестве ответа YatajgaEditor 6 октября 2013 г. 10:52
    30 августа 2013 г. 5:31
    Модератор

Все ответы

  • "Уважаемые, знатоки! Снова беззастенчиво спрашиваю и пытаюсь напрячь занятых людей. Простите, но хочу признаться что тут дейстивительнно нахожу помощь и внятные объяснения." - форумы на то и форумы.

    "Загвоздка в том что у меня ни в первой ни во второй задачи не получается увидеть сгенерированныей строки при операции Пост" - а вы конкретно, что то уже предприняли и не получилось. Или нет идей как это реализовать?


    Сделаем содержимое сообщества лучше, вместе!

    26 августа 2013 г. 7:18
    Модератор
  • Дело в том, что я пишу и подгружаю других после нескольких дней попыток и поисков на других форумах
    Вот то что я "нарубил":

    HOME/INDEX VIEW:

    @model IEnumerable<MvcApplicationGrid.Models.ClientRow>
    
    @{
        WebGrid grid = new WebGrid(Model);
    }
    
    <header>
        <script type="text/javascript" src='@Url.Content("/Scripts/jquery-1.8.2.min.js")' ></script>
    
    </header>
    
    @using (Html.BeginForm("Save", "Home", FormMethod.Post, new { @class = "updateForm" }))
    {
            @Html.ActionLink("Add another...", "BlankEditorRow", null, new { id = "addItem" }) 
        <br />
        <table id="editorRows">
            <tr>
                <td>RowIndex</td>
                <td>FirstName</td>
                <td>LastName</td>
                <td>CompanyName</td>
                <td>Email</td>
                <td>Fax</td>
                <td>Phone</td>
                <td></td>
            </tr>
    
            @Html.EditorFor(m=>m)
    
    
        </table>
        
    
    
        <input type="submit" title="Save"  />
    }
    
    <script>
    
        $("#addItem").click(function () {
            $.ajax({
                url: this.href,
                cache: false,
                data: { index: $('#editorRows tr').length },
                success: function (html) {
                    $("#editorRows tbody").append(html);
                }
            });
            return false;
        });
    
        $('.delete').click(function () {
            var tr = $(this).closest("tr")
             $(tr).find('input[type="hidden"]').val('True');
             $(tr).css("display", "none");
            return false;
        });
    
        
        $('.dublicate').click(function () {
            var tr = $(this).closest("tr")
            $(this).closest("tr").after('<tr><td>11511</td></tr>');
            return false;
        });
    
    </script>
    
    

    EditorTemplates-> ClientRow.cshtml

    @model MvcApplicationGrid.Models.ClientRow
    <tr>
    <td>
        @Html.EditorFor(x=>x.IsDeleted) 
        @Html.EditorFor(x => x.RowIndex)</td>
    <td>@Html.EditorFor(x => x.FirstName)</td>
    <td>@Html.EditorFor(x => x.LastName)</td>
    <td>@Html.EditorFor(x => x.CompanyName)</td>
    <td>@Html.EditorFor(x => x.Email)</td>
    <td>@Html.EditorFor(x => x.Fax)</td>
    <td>@Html.EditorFor(x => x.Phone)</td>
    <td> 
           @Html.ActionLink("Delete", "Delete", new { id = Model.ID }, new { @class = "delete" })
        |
         @Html.ActionLink("Dublicate", "Dublicate", new { id = Model.ID }, new { @class = "dublicate" })</td>
    
    </tr>
    

    PARTIAL 

    @model MvcApplicationGrid.Models.ClientRow
    
    <tr>
    <td>
        @Html.EditorFor(x=>x.IsDeleted) 
        @Html.EditorFor(x => x.RowIndex)</td>
    <td>@Html.EditorFor(x => x.FirstName)</td>
    <td>@Html.EditorFor(x => x.LastName)</td>
    <td>@Html.EditorFor(x => x.CompanyName)</td>
    <td>@Html.EditorFor(x => x.Email)</td>
    <td>@Html.EditorFor(x => x.Fax)</td>
    <td>@Html.EditorFor(x => x.Phone)</td>
    <td> 
           @Html.ActionLink("Delete", "Delete", new { id = Model.ID }, new { @class = "delete" })
        |
         @Html.ActionLink("Dublicate", "Dublicate", new { id = Model.ID }, new { @class = "dublicate" })</td>
    </tr>
    

    HOME CONTROLLER : 

    using MvcApplicationGrid.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcApplicationGrid.Controllers
    {
        public class HomeController : Controller
        {
    
            [HttpGet]
            public ActionResult Index()
            {
              List<ClientRow> rows=  GetDataFromDB().OrderBy(x=>x.RowIndex).ToList();
    
              return View(rows);
            }
    
            [HttpPost]
            public ActionResult Save(IEnumerable<MvcApplicationGrid.Models.ClientRow> rows)
            {
                return View(rows);
            }
    
            public PartialViewResult BlankEditorRow(int index)
            {
                ClientRow row = new ClientRow();
                row.RowIndex = index;
               return PartialView("EditClientRow", row);
    
            }
    
            private List<ClientRow> GetDataFromDB()
            {
                List<ClientRow> rows = new List<ClientRow>();
    
                for (int i = 1; i < 11; i++)
                {
                    ClientRow newRow = new ClientRow();
                    newRow.ID = i;
                    newRow.TabID = "1";
                    newRow.CompanySheetID = 1;
                    newRow.RowIndex = i ;
                    newRow.FirstName = "FirstName" + i;
                    newRow.LastName = "LastName" + i;
                    newRow.CompanyName = "CompanyName" + i;
                    newRow.Phone = "Phone" + i;
                    newRow.Fax = "Fax" + i;
                    newRow.Email = "Email" + i;
                    newRow.IsDeleted = false;
    
                    rows.Add(newRow);
                }
                return rows;
    
            }
    
        }
    }
    

    26 августа 2013 г. 7:45
  • Ребята, неужели нет предложений?
    27 августа 2013 г. 14:02
  • Будут. Просто пока времени не было посмотреть.

    Сделаем содержимое сообщества лучше, вместе!

    27 августа 2013 г. 14:03
    Модератор
  • "1.  надо во первых добавить еще одну строку (пустую) и я это делаю через Partial" - если её надо добавить в таблицу, то смысла отдельное частичное представление делать нет. Просто добавьте его в список используя который вы рендерите таблицу.

    "2 на каждой строке есть кнопка дублирования этой строки. И при нажатии на нее я бы хотел под выбранной строкой сгенерировать такую же." - а вот для копирования не нужно отпралять форму обратно. Можете использовать jQuery и копировать строку на клиенте. Например используя метод clone.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:28
    • Помечено в качестве ответа YatajgaEditor 6 октября 2013 г. 10:52
    30 августа 2013 г. 5:31
    Модератор