Я создал пользовательский элемент управления Address, который выглядит следующим образом:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Address>" %>
<div class="span-4" style="text-align: right" title="<%: GetLocalResourceObject("Type") %>">
<%: GetLocalResourceObject("Type")%>
</div>
<div class="span-6 last">
<%: Html.RadioButtonFor(model => model.AddressType, RealProperty.Core.Domain.AddressType.Postal, new { id = ViewData["AddressPrefix"] + "AddressType" })%>
<%: GetLocalResourceObject("PostalType")%>
<%: Html.RadioButtonFor(model => model.AddressType, RealProperty.Core.Domain.AddressType.Intersection, new { id = ViewData["AddressPrefix"] + "AddressType" })%>
<%: GetLocalResourceObject("IntersectionType")%>
</div>
<div class="span-4" style="text-align: right" title="<%: GetLocalResourceObject("Country") %>">
<%: GetLocalResourceObject("Country")%>
</div>
<div class="span-6 last">
<%: Html.DropDownList(ViewData["AddressPrefix"] + "Country", new SelectList(RealProperty.Core.Service.CountryService.Countries, "Id", "Name"), "Please select Country", new { id = ViewData["AddressPrefix"] + "Country" })%>
<%: Html.ValidationMessage(ViewData["AddressPrefix"] + "Country")%>
</div>
<div class="span-4" style="text-align: right" title="<%: GetLocalResourceObject("Address1") %>">
<%: GetLocalResourceObject("Address1")%>
</div>
.
.
.
.
Я буду использовать два экземпляра этого пользовательского элемента управления на странице для «Основной адрес» и «Альтернативный адрес»:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<PhysicalLocation>" %>
<div class="span-12">
<fieldset>
<legend>Main Address</legend>
<%
Html.RenderPartial("~/Views/Address/New.ascx", Model.MainAddress);
%>
</fieldset>
</div>
<div class="span-12 last">
<fieldset>
<legend>Alternate Address</legend>
<%
Html.RenderPartial("~/Views/Address/New.ascx", Model.AlternateAddress);
%>
</fieldset>
</div>
Управление адресом пользователя привязано к модели «Адрес».
[PostalCode("PostalCode", "Country", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "PostalCode_Is_Invalid"), DisplayName("Address") ]
public class Address : ICanBeValidated
{
public virtual long Id { get; set; }
[RegularExpression("^[^,'\"]*$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "InvalidCharacter"),
Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Field_Required"), StringLength(255, ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Field_Max_Length_Allowed")]
public virtual string Address1 { get; set; }
[RegularExpression("^[^,'\"]*$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "InvalidCharacter"),
StringLength(255, ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Field_Max_Length_Allowed")]
public virtual string Address2 { get; set; }
[RegularExpression("^([a-zA-Z\\.\\-\\s]*)$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "ValidCharacter_Allowed")]
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Field_Required"), StringLength(30, ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Field_Max_Length_Allowed")]
public virtual string City { get; set; }
.
.
.
}
Я ожидаю, что при рендеринге он создает два разных набора элементов управления вводом для MainAddress и AlternateAddress (т.е. исходя из опыта веб-формы).
Я предполагаю, что мне не хватаеточень базовый момент здесь, поскольку, когда отображаются оба пользовательских элемента управления, на странице у меня есть два "города", "адрес1", "адрес2" и т. д.
И в результате Microsoft Validation работает только для одногоиз пользовательских элементов управления.Массив JSON, отправляемый клиенту, содержит проверку только для одного из них, основываясь на определении модели.Например, для свойства «City» адреса у нас есть только одна запись в упомянутом массиве, и в результате существует только элемент «span» с идентификатором «City_ValidateMessage», связанным с проверкой.
Я ценю любые мысли.
Спасибо, Мухаммед