Nano Hash - криптовалюты, майнинг, программирование

Привязка модели при многократном рендеринге частичного вида (частичный вид используется для редактирования)

Приветствую всех,

У меня небольшие проблемы с частичным представлением, которое я использую в качестве формы редактирования. Помимо скрытых элементов в форме, модель имеет значение null при передаче в мой пост-контроллер EditContact.

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

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebUI.DataAccess.CONTACT>" %>
<div id="contactPartial-<%= ViewData.Model.id %>">
    <% Html.EnableClientValidation(); %>
    <% using (Html.BeginForm("EditContact", "Investigator"))
       { %>
    <%= Html.HiddenFor(Model => Model.id) %>
    <%= Html.HiddenFor(Model => Model.investId) %>
    <table id="EditContact-<%= ViewData.Model.id %>" width="100%">
        <tr>
            <th colspan="4">
                <b>New Contact</b>
            </th>
        </tr>
        <tr>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.type)%></b><br />
                <%= Html.EditorFor(Model => Model.type, null, "contactType-" + ViewData.Model.id)%><br />
                <%= Html.ValidationMessageFor(Model => Model.type) %>
            </td>
        </tr>
        <tr>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.salutation)%></b><br />
                <%= Html.EditorFor(Model => Model.salutation, null, "contactsalutation-"+ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.firstName)%></b><br />
                <%= Html.EditorFor(Model => Model.firstName, null, "contactFirstName-"+ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.middleName)%></b><br />
                <%= Html.EditorFor(Model => Model.middleName, null, "contactMiddleName-"+ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.lastName)%></b><br />
                <%= Html.EditorFor(Model => Model.lastName, null, "contactLastName-"+ViewData.Model.id)%><br />
                <%= Html.ValidationMessageFor(Model => Model.lastName)%>
            </td>
        </tr>
        <tr>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.title)%></b><br />
                <%= Html.EditorFor(Model => Model.title, null, "contactTitle-"+ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.phone)%></b><br />
                <%= Html.EditorFor(Model => Model.phone, null, "contactPhone="+ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.altPhone)%></b><br />
                <%= Html.EditorFor(Model => Model.altPhone, null, "contactAltPhone-" + ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.fax)%></b><br />
                <%= Html.EditorFor(Model => Model.fax, null, "contactFax-" + ViewData.Model.id)%>
            </td>
        </tr>
        <tr>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.email)%></b><br />
                <%= Html.EditorFor(Model => Model.email, null, "contactEmail-" + ViewData.Model.id)%>
            </td>
            <td>
                <b>
                    <%= Html.LabelFor(Model => Model.comment)%></b><br />
                <%= Html.EditorFor(Model => Model.comment, null, "contactComment-" + ViewData.Model.id)%>
            </td>
            <td>
            </td>
            <td>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Save" />
            </td>
            <td>
                <button id="<%= ViewData.Model.id %>" class="contactEditHide">
                    Cancel</button>
            </td>
            <td>
            </td>
            <td>
            </td>
        </tr>
    </table>
    <% } %>
</div>

Когда передается контроллер Edit contact post, только модель id и investId имеют значения; все остальное равно нулю. Вот как я визуализирую частичное представление в моем представлении «Подробности»:

   <table width="100%">
    <tr>
        <th colspan="7">
            <b>Contacts</b>
        </th>
        <th id="contactButton" class="button">
            <button id="showEditContact-0" type="button" class="contactEditShow">New Contact</button>
        </th>
    </tr>
    <tr>
        <th>
            Type
        </th>
        <th>
            Name
        </th>
        <th colspan="2">
            Title
        </th>
        <th>
            Prim. & Alt. Phone
        </th>
        <th>
            Fax
        </th>
        <th colspan="2">
            Comment
        </th>
    </tr>
    <% for (int i = 0; i < Model.CONTACTs.Count; i++)
       { %>           
    <tr id="contactRow-<%= Model.CONTACTs[i].id %>" class="contactRow">
        <td>
            <%= Html.Encode(Model.CONTACTs[i].type)%>
        </td>
        <td>
            <%= Html.Encode(Model.CONTACTs[i].salutation)%>
            <%= Html.Encode(Model.CONTACTs[i].firstName)%>
            <%= Html.Encode(Model.CONTACTs[i].middleName)%>
            <%= Html.Encode(Model.CONTACTs[i].lastName)%>
            <br />
            <a href="mailto:<%= Html.AttributeEncode(Model.CONTACTs[i].email) %>">
                <%= Html.Encode(Model.CONTACTs[i].email)%></a>
        </td>
        <td colspan="2">
            <%= Html.Encode(Model.CONTACTs[i].title)%>
        </td>
        <td>
            Prim:<%= Html.Encode(Model.CONTACTs[i].phone)%><br />
            Alt:<%= Html.Encode(Model.CONTACTs[i].altPhone)%>
        </td>
        <td>
            <%= Html.Encode(Model.CONTACTs[i].fax)%>
        </td>
        <td>
            <%= Html.Encode(Model.CONTACTs[i].comment)%>
        </td>
        <td>
            <button id="<%= Model.CONTACTs[i].id %>" type="button" class="contactEditShow">Edit Contact</button>
        </td>
    </tr>
    <tr>
        <td colspan="8">
            <% Html.RenderPartial("EditContact", Model.CONTACTs[i]); %>
        </td>
    </tr>
    <% } %>
</table>

Мое представление сведений сильно привязано к модели ИССЛЕДОВАТЕЛЯ:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.DataAccess.INVESTIGATOR>" %>

Как вы можете видеть выше, мое частичное представление строго типизировано для модели CONTACTS.

Я столкнулся с аналогичной проблемой с привязкой модели, когда в представлении я пытался разрешить редактирование всех слоев адреса за один раз и исправил это путем индексации модели, как и в представлении «Подробности» выше. Похоже, мне нужно сделать то же самое в моем частичном представлении, чтобы обеспечить привязку модели, но я не уверен, как этого добиться (возникают проблемы с синтаксисом).

Конечно, я мог бы быть здесь и нуждаться в новом решении в целом! Дайте мне знать, если вам понадобится более подробная информация! Спасибо!


Ответы:


1

Почему вы используете

<%= Html.EditorFor(Model => Model.salutation, null, "contactsalutation-"+ViewData.Model.id)%>

Если вы используете это просто так

<%= Html.EditorFor(Model => Model.salutation) %>

Он должен работать.

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

16.10.2010
  • Что ж ... интересно! Это сработало. Я отмечу это как ответ. Я переименовал идентификаторы, чтобы они были уникальными. Например, мне нужно иметь возможность очищать частичный контакт, когда вводится новый контакт, но пользователь отменяет его. У контакта есть тип, и есть еще один фрагмент в представлении для адреса, который также имеет тип. Оба идентификатора имеют одинаковое имя в html. Я поиграю с этим еще немного, чтобы увидеть, смогу ли я его разгадать. Еще раз спасибо. 16.10.2010

  • 2

    Используйте Html.EditorFor вместо Html.RenderPartial.

    См. Связывание модели с вложенными дочерними моделями и PartialViews в ASP.NET MVC.

    24.11.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..