ASP.NET EditorTemplate DropdownList

Mar*_*way 9 asp.net-mvc editortemplates asp.net-mvc-2

每次我添加一个新的App它会创建一个新的AppCategory.我正在以某种方式严重搞砸了

代码第一个实体框架对象

public class AppCategory
{
    public int ID { get; set; }
    public string Name { get; set; }
    public ICollection<App> apps { get; set; }
}

public class App 
{
    public int ID { get; set; }
    public string Name { get; set; }
    public AppCategory Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编辑模板(我想只做一个外键编辑器模板)

@inherits System.Web.Mvc.WebViewPage
@Html.DropDownList("Category", LIG2010RedesignMVC3.Models.Repo.GetAppCategoriesSelect())
Run Code Online (Sandbox Code Playgroud)

当然还有存储库

    public static IEnumerable<SelectListItem> GetAppCategoriesSelect()
    {
        return (from p in GetAppCategories()
                select new SelectListItem
                {
                    Text = p.Name,
                    Value = p.ID.ToString(),

                });
    }


    public static ICollection<AppCategory> GetAppCategories()
    {
        var context = new LIGDataContext();
        return context.AppCategories.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

每次我添加一个新的App它创建一个新的AppCategory我严重搞砸了这个


添加更多调试信息

 @inherits System.Web.Mvc.WebViewPage
 @Html.DropDownList("", LIG2010RedesignMVC3.Models.Repo.GetAppCategoriesSelect())
Run Code Online (Sandbox Code Playgroud)

在帖子上给我一个验证消息

 Parameters  application/x-www-form-urlencoded
 Category   1
 Name   8
Run Code Online (Sandbox Code Playgroud)

验证错误值"1"无效.
这是有道理的,因为Category应该是一个对象而不是一个整数.


控制器代码被要求 非常确定这不是问题,因为它来自MVCScaffold

    [HttpPost]
    public ActionResult Create(App d)
    {
        if (ModelState.IsValid)
        {
          context.Apps.Add(d);
          context.SaveChanges();
          return RedirectToAction("Index");  
        }
        return View();
     }
Run Code Online (Sandbox Code Playgroud)

Mar*_*way 5

我的模型设置不正确...虚拟ICollection和sub的外键ID以及所有工作......改变如下

模型

public class AppCategory
{
    public int ID { get; set; }
    public string Name { get; set; }
    public **virtual** ICollection<App> Apps { get; set; }
}

public class App 
{
    public int ID { get; set; }
    ********************************************
    [UIHint("AppCategory")]
    public int AppCategoryID { get; set; }
    ********************************************
    public string Name { get; set; }

}

public class LIGDataContext : DbContext
{
    public DbSet<AppCategory> AppCategories { get; set; }
    public DbSet<App> Apps { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

/Views/Shared/EditorTemplates/AppCategory.cshtml

@inherits System.Web.Mvc.WebViewPage
@Html.DropDownList("", LIG2010RedesignMVC3.Models.Repo.GetAppCategoriesSelect())
Run Code Online (Sandbox Code Playgroud)

AppController的

 [HttpPost]
    public ActionResult Create(App d)
    {
        if (ModelState.IsValid)
        {
          this.repository.Add(d);
          this.repository.Save();
          return RedirectToAction("Index");  
        }
        return View();
    }
Run Code Online (Sandbox Code Playgroud)