ASP MVC 3 Частичное представление для свойств с другим именем свойства, но одного типа - PullRequest
1 голос
/ 12 декабря 2011

У меня есть модель

public class UserModel : IUserModel
        {
            public LocationModel WorkLocation { get; set; }
            public LocationModel HomeLocation { get; set; }
            public LocationModel ShippingLocation { get; set; }
    }

Я создал частичное представление того, что показывают поля из класса LocationModel.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<LocationModel>" %>
<fieldset>
    <div class="common-fieldset">
        <div>
            <span class="editor-label">
                <%: Html.LabelFor(model => model.Location.Bldg)%>
            </span><span class="editor-field">
                <%: Html.EditorFor(model => model.Location.Bldg)%>
            </span><span class="editor-label">
                <%: Html.LabelFor(model => model.Location.Lobby)%>
            </span><span class="editor-field">
                <%: Html.EditorFor(model => model.Location.Lobby)%>
            </span><span class="editor-label">
                <%: Html.LabelFor(model => model.Location.Suite)%>
            </span><span class="editor-field">
                <%: Html.EditorFor(model => model.Location.Suite)%>
            </span>
        </div>
    </div>
</fieldset>

Когда контроллер рендерит, мой пользовательский вечер выглядит хорошо. Но все идентификаторы полей в HTML из моих классов LocationModel имеют одно и то же имя, а в свойствах LocationModel обратной записи не содержатся значения init. Это рендеринг каждого из этих свойств без частичного просмотра все работает нормально. Зачем ? Спасибо.

 <div>
        Home Address:
          <%: Html.Partial("Controls/Location", Model.HomeLocation) %>
        </div>

         <div>
         Work Address:
          <%: Html.Partial("Controls/Location", Model.WorkLocation) %>
        </div>

        <div> Shipping Address:
          <%: Html.Partial("Controls/Location",Model.ShippingLocation) %>
        </div>

1 Ответ

1 голос
/ 12 декабря 2011

Я создал частичное представление, что показывают поля из класса LocationModel.

Вместо частичного использования я бы рекомендовал использовать шаблон редактора. Так что переместите это LocationModel.ascx внутрь ~/Views/Shared/EditorTemplates/LocationModel.ascx, а затем просто:

<div>
    Home Address:
    <%= Html.EditorFor(x => x.HomeLocation) %>
</div>

<div>
    Work Address:
    <%= Html.EditorFor(x => x.WorkLocation) %>
</div>

<div>
    Shipping Address:
    <%= Html.EditorFor(x => x.ShippingLocation) %>
</div>

Теперь все ваши входные данные будут иметь правильные идентификаторы и имена.

...