1

我有一个实体 Kajak:

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; } 
    }

与 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 和实体框架。

我想为 Kajak 属性创建一个编辑选项,除了所有附加的 kajakimages 的 id 和 name 属性

4

1 回答 1

0

我认为最好的解决方案是创建一个自定义EditorTemplate。您必须在名为(或文件夹)下的文件夹中创建一个名称为KajakImage.cshtml(必须是要渲染的模型的名称)的局部视图文件:EditorTemplatesViews/YourControllerNameShared

@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循环,因为当您传入 s 的集合时,ASP.MVC 将自动为每个项目呈现一次局部视图KajakImage

@Html.HiddenFor(model => model.ImageID)此处是为了确保您KajakImage在发布请求时获得模型绑定器实例化的对象,这些对象具有正确的原始键值与Name属性一起设置。(集合的其余属性KajakImage将无效/空/null因为您的视图中没有它们的表单字段。)

于 2012-07-12T23:01:06.137 回答