【问题标题】:MVC Accessing navigation property for listboxForMVC 访问 listboxFor 的导航属性
【发布时间】:2013-12-14 12:32:44
【问题描述】:

首先我应该说我完全是 MVC 的新手。 我有 3 个对象

 public partial class Magazine
{
    public Magazine()
    {
        this.NumberTitles = new HashSet<NumberTitle>();
    }

    public int Id { get; set; }
    public int MagYear { get; set; }
    public int MagNo { get; set; }
    public int MagSeason { get; set; }
    public string MagYear2 { get; set; }

    public virtual ICollection<NumberTitle> NumberTitles { get; set; }
}

public partial class NumberTitle
{
    public NumberTitle()
    {
        this.Articles = new HashSet<Article>();
    }

    public int Id { get; set; }
    public int MagazineId { get; set; }
    public int TitleId { get; set; }
    public int position { get; set; }

    public virtual ICollection<Article> Articles { get; set; }
    public virtual Magazine Magazine { get; set; }
    public virtual Title Title { get; set; }
}


public partial class Title
{
    public Title()
    {
        this.ChildrenTitle = new HashSet<Title>();
        this.NumberTitles = new HashSet<NumberTitle>();
    }

    public int Id { get; set; }
    public string TitleText { get; set; }
    public Nullable<int> ParentId { get; set; }

    public virtual ICollection<Title> ChildrenTitle { get; set; }
    public virtual Title ParentTitle { get; set; }
    public virtual ICollection<NumberTitle> NumberTitles { get; set; }
}

在视图中,我想让 TextBox 显示杂志编号和 2 个列表框。一个显示所有可用的标题,另一个显示该杂志编号的所有标题。所以我制作了视图模型

public class NumberTitleViewModel
{       
    public Magazine Magazine { get; set; }
    public List<NumberTitle> NumberTitles { get; set; }
}

这是在控制器中。如何获取指定 MagazineId 的标题列表

    public ActionResult EditTitle(int id)
    {
        Func<IQueryable<Magazine>, IOrderedQueryable<Magazine>> orderByFunc = null;
        Expression<Func<Magazine, bool>> filterExpr = null;
        if (id>0)
        {
            filterExpr = p => p.Id.Equals(id);
        }

        Magazine magazine = unitOfWork.MagazineRepository.Get(filter: filterExpr, orderBy: orderByFunc, includeProperties: "").SingleOrDefault();
        NumberTitleViewModel numberTitleViewMode = new NumberTitleViewModel();
        numberTitleViewMode.Magazine = magazine;
        Expression<Func<NumberTitle, bool>> filterExpr2 = null;
        if (id > 0)
        {
            filterExpr2 = p => p.MagazineId.Equals(id);
        }
        var numberTitles = unitOfWork.NumberTitleRepository.Get(filterExpr2, null, includeProperties: "Title").ToList();

        var titles = unitOfWork.TitleRepository.Get(null, null, "");
        numberTitleViewMode.NumberTitles = numberTitles; ///this part doesn't show the Titles. how should access the TitleName not Id
        ViewBag.titles = new SelectList(titles, "Id", "TitleText");
        return View("../Panel/Magazine/EditTitle", "_BasicLayout", numberTitleViewMode);
    }

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 model-view-controller


    【解决方案1】:

    不确定你的观点,但你应该有类似的东西:

    @using NameSpace.Models
    @model NameSpace.Models.NumberTitleViewModel
    

    然后你可以在你的视图中做这样的事情:

     foreach (NumberTitles item in   @Model)
        {
            <label>@item.Title.TitleText</label>
        }
    

    不准确,但应该能让你接近你需要的东西

    【讨论】:

    • 我应该如何将两个模型从控制器传递到视图?
    • 看起来你已经在返回 View(string,string,object)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多