Использование 2 экземпляров одного и того же частичного представления на странице - PullRequest
2 голосов
/ 31 августа 2011

На моей странице я использую 2 экземпляра того же PartialView, что и

<div>
        @Html.Partial("AddressPartial1", Model.Address1)   
</div>
<div>                                           
        @Html.Partial("AddressPartial2", Model.Address2) 
</div>

Я могу получить уникальный идентификатор для всех моих полей в PartialView для обоих экземпляров, передав InstanceName и связав его с именами полей. Теперь проблема в том, что, когда я публикую свою страницу, я не получаю объект модели для обоих моих представлений. Я могу прочитать значения элементов управления с помощью FormCollection, но я искал лучшее решение для моего сценария использования 2 экземпляров PartialView на одной странице. Заранее спасибо!

Вот мой код:

Модель (для моей страницы):

Private m_Address1 As New AddressModel("Address1")
    Public Property Address1() As AddressModel
        Get
            Return m_Address1
        End Get
        Set(ByVal value As AddressModel)
            m_Address1 = value
        End Set
    End Property

   Private m_Address2 As New AddressModel("Address2")
    Public Property Address2 () As AddressModel
        Get
            Return m_Address2 
        End Get
        Set(ByVal value As AddressModel)
            m_Address2 = value
        End Set
    End Property

Модель для PartialView:

Public Class AddressModel
    Public Sub New()

    End Sub

    Public Sub New(ModelInstanceName As String)
        m_ModelInstanceName = ModelInstanceName
    End Sub

    Private m_ModelInstanceName As String
Private m_StreetAddress1 As String
    Private m_StreetAddress2 As String
    Private m_City As String
    Private m_State As String
    Private m_ZipCode As String

Public Property ModelInstanceName As String
        Get
            Return m_ModelInstanceName
        End Get
        Set(value As String)
            m_ModelInstanceName = value
        End Set
    End Property

Public Property StreetAddress1() As String
        Get
            Return m_StreetAddress1
        End Get
        Set(ByVal value As String)
            If (value IsNot Nothing) Then value = value.Trim()
            If (String.IsNullOrWhiteSpace(value)) Then value = Nothing

            m_StreetAddress1 = value
        End Set
    End Property

и другие свойства ....

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

@ModelType AddressModel
<table style="padding-left: 5px; padding-bottom: 10px; width: 99%">
    <tr>
        <td colspan="4">
            <div class="editor-label">
                <span class="required">@Html.LabelFor(Function(m) m.StreetAddress1)</span>
                </div>
                <div class="editor-field">
                    @Html.TextBox(Model.ModelInstanceName + "_StreetAddress1", Model.StreetAddress1, New With {.style = "width:390px"})
                    @Html.ValidationMessageFor(Function(m) m.StreetAddress1)
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="4">
                <div class="editor-field">
                    @Html.TextBox(Model.ModelInstanceName + "_StreetAddress2", Model.StreetAddress2, New With {.style = "width:390px"})
                    @Html.ValidationMessageFor(Function(model) model.StreetAddress2)
                </div>
            </td>
        </tr>

<tr>
        <td>
            <div class="editor-label">
                <span class="required">@Html.LabelFor(Function(model) model.ZipCode)</span>
            </div>
            <div class="editor-field">
                @Html.TextBox(Model.ModelInstanceName + "_ZipCode", Model.ZipCode, New With {.style = "width:60px", .maxlength = "5", .onblur = "zipchange('" + Model.ModelInstanceName + "')"})
                @Html.ValidationMessageFor(Function(model) model.ZipCode)
            </div>
        </td>
        <td>
            <div class="editor-label">
                <span class="required">@Html.LabelFor(Function(model) model.City)</span>
            </div>
            <div class="editor-field">
                @Html.TextBox(Model.ModelInstanceName + "_City", Model.City, New With {.style = "width:130px"})
                @Html.ValidationMessageFor(Function(model) model.City)
            </div>
        </td>
    </tr>
</table>

и так далее ...

1 Ответ

1 голос
/ 06 мая 2015

Настоящий старый, но я столкнулся с той же проблемой. Здесь есть простая статья здесь , которая объясняет проблему и решение.

Что вам нужно сделать, это что-то вроде этого:

 @{ Html.Partial("AddressPartial", Model.Address, new ViewDataDictionary()
   {
       TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "Address1" }
   }); }

 @{ Html.Partial("AddressPartial", Model.Address, new ViewDataDictionary()
   {
       TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "Address2" }
   }); }

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

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