과수원에서 1-1 관계를 만들 때 문제가 발생하여 드롭 다운 목록에서 선택한 항목의 값을 저장할 수 없습니다. 누군가가 나에게이 문제에 대해 어떻게 생각하는지 올바른 방향을 가르키면 appriciate겠습니까.과수원에서 1-1 관계 만들기
연락 부 드라이버
public class ContactPartDriver : ContentPartDriver<ContactPart>
{
private readonly IContactService _contactService;
public ContactPartDriver(IContactService contactService)
{
_contactService = contactService;
}
protected override string Prefix
{
get
{
return "Contact";
}
}
protected override DriverResult Display(ContactPart part,
string displayType, dynamic shapeHelper)
{
return ContentShape("Parts_Contactindex1",
() => shapeHelper.Parts_Contactindex1(
ContentPart: part,
Address: part.Address,
Name : part.Name,
EmailId: part.EmailId,
StateCode: part.Source.Id
));
}
//Get
protected override DriverResult Editor(ContactPart part, dynamic shapeHelper)
{
return ContentShape("Parts_Contact_Edit",() =>
shapeHelper.EditorTemplate(TemplateName: "Parts/Contactindex1",
Model:BuildEditorViewModel(part), Prefix: Prefix));
}
//Post
protected override DriverResult Editor(ContactPart part,
IUpdateModel updater, dynamic shapeHelper)
{
var model = new EditContactViewModel();
updater.TryUpdateModel(part, Prefix, null, null);
//if (part.ContentItem.Id != 0)
//{
// _contactService.UpdateContactForContentItem(part.ContentItem, model);
//}
return Editor(part, shapeHelper);
}
private EditContactViewModel BuildEditorViewModel(ContactPart part)
{
var model = new EditContactViewModel {
Name = part.Name,
Address = part.Address,
EmailId = part.EmailId,
Sources = _contactService.GetSource()
};
return model;
}
}
}
연락 처리기
public class ContactHandler :ContentHandler
{
public ContactHandler (IRepository<ContactPartRecord> respository)
{
Filters.Add(StorageFilter.For(respository));
}
}
모델 ContactPart
{
public class ContactPart : ContentPart<ContactPartRecord>
{
public string Name
{
get { return Retrieve(x => x.Name); }
set { Store(x => x.Name, value); }
}
public string Address
{
get { return Retrieve(x => x.Address); }
set { Store(x => x.Address, value); }
}
public string EmailId
{
get { return Retrieve(x => x.EmailId); }
set { Store(x => x.EmailId, value); }
}
public SourceRecord Source
{
get { return Retrieve(x => x.SourceRecord); }
set {Store(x => x.SourceRecord,value);}
}
}
}
ContactPartRecord
{
public class ContactPartRecord : ContentPartRecord
{
public virtual string Name { get; set; }
public virtual string Address { get; set; }
public virtual string EmailId { get; set; }
public virtual SourceRecord SourceRecord { get; set; }
}
}
기록 부분
{
public class SourceRecord
{
public virtual int Id { get; set; }
public virtual string Type { get; set; }
}
}
연락 서비스
{
public interface IContactService : IDependency {
void UpdateContactForContentItem(ContentItem item, EditContactViewModel model);
IEnumerable<SourceRecord> GetSource();
}
public class ContactService : IContactService
{
private readonly IRepository<SourceRecord> _sourceRepository;
public ContactService(IRepository<SourceRecord> sourceRepository)
{
_sourceRepository = sourceRepository;
}
public void UpdateContactForContentItem(ContentItem item, EditContactViewModel model)
{
var contactPart = item.As<ContactPart>();
contactPart.Address = model.Address;
contactPart.Name = model.Name;
contactPart.EmailId = model.EmailId;
contactPart.Source = _sourceRepository.Get(s => s.Id == model.SourceId);
}
public IEnumerable<SourceRecord> GetSource()
{
return _sourceRepository.Table.ToList();
}
}
}
EditContactViewModel
{
public class EditContactViewModel
{
public string Name { get; set; }
public string Address{ get; set; }
public string EmailId { get; set; }
public int SourceId { get; set; }
public IEnumerable<SourceRecord> Sources{ get; set; }
}
}
연락처보기
@using Cess.Contacts.ViewModel;
@model EditContactViewModel
<fieldset>
<legend>New Contact</legend>
@Html.LabelFor(m =>m.Name)
@Html.EditorFor(m => m.Name)
@Html.LabelFor(m => m.Address)
@Html.TextAreaFor(m => m.Address)
@Html.LabelFor(m => m.EmailId)
@Html.EditorFor(m => m.EmailId)
<p>
@Html.DropDownListFor(model => model.Sources,
Model.Sources.Select(s => new SelectListItem
{
Selected = s.Id == Model.SourceId,
Text = s.Type ,
Value = s.Id.ToString()
}),
"Choose a Source...")
</p>
</fieldset>
실제로 @Yash, 샘이 잘하고 있다고 생각합니다. 그는 새로운 infoset 모델을 사용하고 있으며 모든 것을 관리해야합니다. 아직 사용하지 않았습니다. 다음 프로젝트에서 곧 할 수 있습니다. 여기에 약간의 링크가 있습니다. http://weblogs.asp.net/bleroy/archive/2013/11/04/the-shift-how-orchard -pastely-shifted-document-storage-and-how-it-l-affect-you.aspx (죄송합니다. 내 의견에 댓글을 달 수 있습니다.) – ErMasca
예 infoset 교대를 알고 있습니다. 나는 비슷한 것을 시도했다. 하지만 관계형 속성의 경우 Record.value를 사용해야하는 것처럼 보입니다. – Yashvit