Orchardcms 在Orchard中创建1-1关系
在orchard中创建1-1关系时出现问题,无法保存下拉列表中所选项目的值。如果有人给我指出了解决这个问题的正确方向,我会很感激的 接触件驱动器Orchardcms 在Orchard中创建1-1关系,orchardcms,orchardcms-1.7,Orchardcms,Orchardcms 1.7,在orchard中创建1-1关系时出现问题,无法保存下拉列表中所选项目的值。如果有人给我指出了解决这个问题的正确方向,我会很感激的 接触件驱动器 public class ContactPartDriver : ContentPartDriver<ContactPart> { private readonly IContactService _contactService; public ContactPartDriver(IContactS
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 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();
}
}
}
{
公共接口IContactService:IDependency{
作废UpdateContactForContentItem(ContentItem项,EditContactViewModel模型);
IEnumerable GetSource();
}
公共类ContactService:IContactService
{
私有只读IRepository\u sourceRepository;
公共联系人服务(IRepository sourceRepository)
{
_sourceRepository=sourceRepository;
}
public void UpdateContactForContentItem(ContentItem项,EditContactViewModel模型)
{
var contactPart=item.As();
contactPart.Address=model.Address;
contactPart.Name=model.Name;
contactPart.EmailId=model.EmailId;
contactPart.Source=\u sourceRepository.Get(s=>s.Id==model.SourceId);
}
公共IEnumerable 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; }
}
}
{
公共类EditContactViewModel
{
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共字符串EmailId{get;set;}
public int SourceId{get;set;}
公共IEnumerable源{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>
@使用Cess.Contacts.ViewModel;
@模型EditContactViewModel
新联系人
@LabelFor(m=>m.Name)
@EditorFor(m=>m.Name)
@LabelFor(m=>m.Address)
@Html.TextAreaFor(m=>m.Address)
@LabelFor(m=>m.EmailId)
@EditorFor(m=>m.EmailId)
@DropDownListFor(model=>model.Sources,
Model.Sources.Select(s=>newselectListItem
{
所选=s.Id==Model.SourceId,
Text=s.类型,
Value=s.Id.ToString()
}),
“选择一个源…”
然而,在您看来,下拉列表并没有真正保留SourceId,不是吗?
改为:
@Html.DropDownListFor(model => model.SourceId,
Model.Sources.Select(s => new SelectListItem
{
Selected = s.Id == Model.SourceId,
Text = s.Type ,
Value = s.Id.ToString()
}),
"Choose a Source...")
将允许再次对照表进行检查
然而,在您看来,下拉列表并没有真正保留SourceId,不是吗?
改为:
@Html.DropDownListFor(model => model.SourceId,
Model.Sources.Select(s => new SelectListItem
{
Selected = s.Id == Model.SourceId,
Text = s.Type ,
Value = s.Id.ToString()
}),
"Choose a Source...")
将允许再次对照表进行检查 埃尔马斯卡正确地指出了一个错误 在ContentPart中,还需要使用Record.SourceRecord访问导航属性
public SourceRecord Source()
{
get { return Record.SourceRecord; }
set { Record.SourceRecord = value; }
}
埃玛斯卡正确地指出了一个错误 在ContentPart中,还需要使用Record.SourceRecord访问导航属性
public SourceRecord Source()
{
get { return Record.SourceRecord; }
set { Record.SourceRecord = value; }
}
事实上,@Yash,我认为Sam做得很好。他正在使用新的信息集模型,它应该会处理好一切。我还没用过。。在我的下一个项目中将很快完成这里有一个小链接:(对不起,我可以在你的评论下面发表评论)是的,我知道信息集的变化。我也试过做类似的事情。但对于关系属性,似乎必须使用Record.values@Yash,我认为Sam做得还不错。他正在使用新的信息集模型,它应该会处理好一切。我还没用过。。在我的下一个项目中将很快完成这里有一个小链接:(对不起,我可以在你的评论下面发表评论)是的,我知道信息集的变化。我也试过做类似的事情。但对于关系属性,似乎必须使用Record.value
public SourceRecord Source()
{
get { return Record.SourceRecord; }
set { Record.SourceRecord = value; }
}