1

我有一个实体卡亚克:编辑外键表

public class Kajak 
    { 
     [HiddenInput(DisplayValue = false)] 
     [Key] 
     public int KajakID { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public virtual ICollection<KajakImage> KajakImages { get; set; } 
    } 

其中有一个1到许多关系到KajakImages:

public class KajakImage 
{ 
    [Key] 
    public int ImageID { get; set; } 
    public string Name { get; set; } 
    public string Data { get; set; } 
    public string MimeType { get; set; } 
    public int FK_KajakID { get; set; } 
    [ForeignKey("FK_KajakID")] 
    public Kajak Kajak { get; set; } 
} 

我想创建一个编辑视图,可以在同一个窗口中进行编辑。

我无法真正包裹住我的头。到目前为止,我已经来到了这个:

public ViewResult Edit(int kajakID) 
    { 
     Kajak kajak = _kajakRepository.Kajaks.FirstOrDefault(p => p.KajakID == kajakID); 
     return View(kajak); 
    } 

但我对如何创世的“editorfor” kajakimages不知道。

@model Timskajakker.Domain.Entities.Kajak 
@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} 
<h2> 
    Redigér kajak</h2> 
@using (Html.BeginForm("Edit", "AdminKajak")) 
{ 
    @Html.LabelFor(model => model.Name) 
    @Html.EditorFor(model => model.Name) 

    foreach (var kajakImage in Model.KajakImages) 
    { 
     @Html.EditorFor(model => model.KajakImages.Name) // doesn't work.. what to do here?? 
    } 
    <input type="submit" value="Gem" /> 
    @Html.ActionLink("Fortryd og vend tilbage", "Index") 
} 

我使用的是asp.net mvc 4和Entity Framework。

我想创造除ID的卡亚克属性和名称属性从所有连接kajakimages

回答

0

的编辑选项,我认为最好的解决方案是创建一个自定义EditorTemplate。你必须创建一个名为KajakImage.cshtml的局部视图文件(必须是要呈现的模型的名称)一个Views/YourControllerName下称为EditorTemplates(或在Shared文件夹)的文件夹中:

@model Timskajakker.Domain.Entities.KajakImage 

@Html.HiddenFor(model => model.ImageID) 

@Html.LabelFor(model => model.Name) 
@Html.EditorFor(model => model.Name) 

然后只呈现这个模板在你Kajak编辑视图使用:

@using (Html.BeginForm("Edit", "AdminKajak")) 
{ 
    @Html.LabelFor(model => model.Name) 
    @Html.EditorFor(model => model.Name) 

    @Html.EditorFor(model => model.KajakImages) 

    <input type="submit" value="Gem" /> 
    @Html.ActionLink("Fortryd og vend tilbage", "Index") 
} 

你并不需要写一个foreach循环,因为ASP.MVC将每一次的项目时,会自动的KajakImage个集合中通过渲染局部视图。

@Html.HiddenFor(model => model.ImageID)在这里,以确保您获得通过POST请求有与该Name属性设置在一起,正确的原始密钥值模型绑定实例化KajakImage对象。 (KajakImage集合的其余属性将无效/为空/ null,因为您在视图中没有表单字段。)