Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 级联下拉列表mvc3,创建方法_C#_Javascript_Asp.net Mvc 3 - Fatal编程技术网

C# 级联下拉列表mvc3,创建方法

C# 级联下拉列表mvc3,创建方法,c#,javascript,asp.net-mvc-3,C#,Javascript,Asp.net Mvc 3,我尝试创建和层叠dropdownlist:第一个dropdwonlist用于项目,第二个dropdownlist用于活动 型号:项目: usinng System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace ManyToMany.Models

我尝试创建和层叠dropdownlist:第一个dropdwonlist用于项目,第二个dropdownlist用于活动

型号:项目:

usinng System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace ManyToMany.Models
{

    public enum StatusProject
    {
        Ja,
        Nee
    }

    public class Project
    {
        //[DatabaseGenerated(DatabaseGeneratedOption.None)]
        // [Display(Name= "Number")]
        [Key]
        public int ProjectID { get; set; }
        // [Display(Name = "Naam")]
        //[Required(ErrorMessage = "Naam moet wel ingevuld worden")]
        public string Name { get; set; }
        // [StringLength(100,ErrorMessage = "U kunt niet meer dan 100 tekens invoeren!! ")]
        // [Required(ErrorMessage = "Korte beschrijving")]
        [Display(Name ="omschrijving" )]
        public string Description { get; set; }

        // [Required(ErrorMessage = "U moet wel het aantal uren opgeven")]
        [Display(Name = "Geplande uren")]
        public decimal PlannedHours { get; set; }
        [Required(ErrorMessage = "eh, prijskaartje?")]
        [DisplayFormat(DataFormatString = "{0:c}")]
        [Display(Name = "Prijs")]
        public decimal price { get; set; }
        public bool Intern { get; set; }
        [Display(Name = "project manager")]
        public string projectManager { get; set; }
        [Display(Name = "Project Code")]
        public string projectCode { get; set; }
        [Display(Name = "Start Datum")]
        public DateTime? StartDate { get; set; }
        [Display(Name = "Eind datum")]
        public DateTime? EndDate { get; set; }
        [Display(Name = "Actief?")]
        public bool Active { get; set; }
        // public StatusProject StatusProject { get; set; }

        public virtual ICollection<Employee> Employees { get; set;}
        public virtual IEnumerable<Activity>Acitivity  { get; set; }
        //public IEnumerable<Activity> Activities { get; set; }
        //public IEnumerable<SelectListItem> Activities { get; set; }

        public Project()
        {
            this.Employees = new List<Employee>();
            this.Acitivity = new List<Activity>();

        }
    }
}

有人能帮我吗

如果你的怀疑是对的,那么恐怕你在这里做错了什么……什么是活动类型

 <div class="editor-field">
                    @Html.DropDownListFor(model => model.Activity, new SelectList(Enumerable.Empty<SelectListItem>(),"ActivityID", "Name"),null, new {id = "activity"}) 
                    @Html.ValidationMessageFor(model=> model.ActivityID)
  </div> 
请告诉我你到底想用那段代码做什么

到现在为止我认为你应该表现得像

 <div class="editor-field">
                    @Html.DropDownListFor(model => model.ActivityID, new SelectList(Model.Activities,"ActivityID", "Name"),null, new {id = "activity"}) 
                    @Html.ValidationMessageFor(model=> model.ActivityID)
  </div> 
在dropdownFor expression中,表达式应该用于要发布该数据的字段。我的意思是,如果您编写model=>model.Activity,则值将传递给Activity,如果您编写model=>model.ActivityID,则值将传递给ActivityID


乍一看是这样的。如果不是那样的话。请分享编辑视图所依赖的小时模式。这样我们就可以准确地得出结论。

这是我的模型小时:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Globalization;
using System.Web.Mvc;

namespace ManyToMany.Models
{
    public class Hour
    {

        //public string Name { get; set; }
        //public string Url { get; set; }
        public int HourID { get; set; }
       // public virtual Week Week { get; set; }
        public int? WeekID { get; set; }
        //[Key]
        public int? ActivityID { get; set; }
        public virtual Activity Activity { get; set; }
        //public int ActivtityID { get; set; }






        //[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0:c}")]
        //public decimal? Amount { get; set; }


        [ReadOnly(true)]
        //[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public decimal HourTotal { get { return GetTotalHours(); }   }



        public int WeekNumber { get; set; }
        public int yearNumber { get; set; }

        //Properties days:

        public DayOfWeek DayWeek { get; set; }

        //public DateTime DateDay { get; set; }


       [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Monday { get; set; }
        public int Days { get; set; }


        [DataType(DataType.Date)]//
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Tuesday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Wendsday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Thursday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Fryday { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Saterday { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Sunday { get; set; }
        //End properties days


        //Properties hours:
       // [DisplayFormat(DataFormatString = "{0:#.##0.0#}", ApplyFormatInEditMode = true)]
        [Required]
        //[DisplayFormat(DataFormatString= "{0:#,##0.000#}")] 
        public Decimal MondayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal TuesdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal WendsdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal ThursdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal FrydayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal SaterdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal SundayHOurs { get; set; }

        public string TextMonday { get; set; }
        public string TextTuesday { get; set; }
        public string TextWendsday { get; set; }
        public string TextThursday { get; set; }
        public string TextFryday { get; set; }
        public string TextSaterday { get; set; }
        public string TextSunday { get; set; }





        public decimal GetTotalHours()
        {
            return MondayHours + 
                   TuesdayHours + 
                   WendsdayHours + 
                   ThursdayHours + 
                   FrydayHours + 
                   SaterdayHours +
                   SundayHOurs;
        }




        //public IEnumerable<SelectListItem> Hour { get; set; }



        public Hour()
        {

            //Activity = new List<Activity>();

            this.yearNumber = DateTime.Now.Year;

            Days = DateTime.Now.DayOfWeek - DayOfWeek.Monday;
            Monday = DateTime.Now.AddDays(-Days);
            Tuesday =  DateTime.Now.AddDays(0);// .Monday.AddDays(1).ToShortDateString();//.ToShortDateString());
            Wendsday = DateTime.Now.AddDays(1);  //DateTime.Parse(Monday.AddDays(2).ToShortDateString());
            Thursday = DateTime.Now.AddDays(2);    //DateTime.Parse(Monday.AddDays(3).ToShortDateString());
            Fryday = DateTime.Now.AddDays(3);          //DateTime.Parse(Monday.AddDays(4).ToShortDateString());
            Saterday = DateTime.Now.AddDays(4);              //DateTime.Parse(Monday.AddDays(5).ToShortDateString());
            Sunday =   DateTime.Now.AddDays(5);             //DateTime.Parse(Monday.AddDays(6).ToShortDateString());

            this.WeekNumber = System.Threading.Thread.CurrentThread.CurrentCulture.Calendar.GetWeekOfYear(DateTime.Now, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
        }
    }
}
好的。。。。。 所以用这个替换你的活动下拉列表

 <div class="editor-field">
                    @Html.DropDownListFor(model => model.Activity.ActivityID, new SelectList(ViewBag.Activities as IEnumerable,"ActivityID","Name"),null, new {id ="Activity"})
                    @Html.ValidationMessageFor(model=> model.ActivityID)
 </div> 
您得到的ActivityID null错误不是在小时模型中,而是在活动模型中。据说它是一个键,所以在绑定模型时不能为null。上面的代码将绑定它,我希望您不会在ModelState中遇到任何错误


但是,如果您遇到任何进一步的绑定错误,请告诉我ModelState中的哪个属性正在抛出错误。

这是因为您正在分配控制器中的所有活动。在控制器[get]编辑操作中,从项目对象分配ViewBag活动。 但我在小时模型中找不到任何项目属性,我的意思是在保存时,您将如何决定要保存哪个项目的小时


get方法上没有Viewbag分配,这是您必须按两次按钮的原因

我收到了你的电子邮件,但我无法访问你的项目。对此表示抱歉。我正在努力尽快获取它。。同时我发现你的问题是

在视图中,SelectList应该与您想要引用的活动绑定。这就是我将其更改为Activity.Project.Activity的原因。如果你用另一种方式曝光,你可以根据你的曝光量来改变它

如果您只希望特定项目中的活动,请使用此

 <div class="editor-field">
                    @Html.DropDownListFor(model => model.Activity.ActivityID, new SelectList(Model.Activity.Project.Activity as IEnumerable,"ActivityID","Name"),null, new {id ="Activity"})
                    @Html.ValidationMessageFor(model=> model.ActivityID)
 </div> 
post方法也是如此,如果您在绑定模型之外做了额外的练习,那么如果您有相同的视图作为响应,则必须重复该练习。 post方法将如下所示

    [HttpPost]
    public ActionResult Edit(Hour hour)
    {
        if (ModelState.IsValid)
        {
            db.Entry(hour).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.WeekID = new SelectList(db.Weeks, "WeekID", "WeekID", hour.WeekID);
        ViewBag.Projects = db.Projects.ToList();
        ViewBag.Activities = db.Activities.ToList();
        return View(hour);
    }
这将解决您的项目特定的活动问题和绑定问题。
在我可以访问您的项目之前,请发布您的进一步问题,以便我可以在这里告诉您。当ViewModelState表示存在任何错误时,它也会显示属性,以便轻松解决。

ActivityID似乎为空。但如何解决这个问题呢?所以我想归档的是这样的:一个活动可以有一个或多个小时,项目可以有一个或多个活动。因此,在创建小时中,用户可以选择并投影,然后显示关联的活动,然后用户选择一个关联的活动。我已经发布了小时控制器。你看到了吗?有人删除了我的帖子??为什么会发生这种情况?嗨,重播的thx。但现在我通过每一个项目,每一个活动。我的意思是,这些活动没有与关联的项目进行筛选。但仍然会得到错误:ModelState.IsValid=false。你的电子邮件是什么?然后我可以给你发送项目的zip文件,但奇怪的是,当默认值提交到数据库时,你必须按两次按钮dhrumil4u360@gmail.com . 并参考我的答案,以获得下一个解决方案。iv向你发送电子邮件:niels.Fischereiniiv向你发送了项目,你收到了吗?我理解你的意思,但我有一个小时:公共虚拟活动Activity{get;set;},在Activity中我有一个Project的引用:公共虚拟项目Project{get;set;}。因为活动有1个或多个小时,而项目有:1个或多个活动。项目不是直接分配到小时,而是首先通过活动分配到小时。你是说小时控制器的获取方法?在此方法中?:公共操作结果创建{ViewBag.HourID=new SelectListdb.Hours,HourID,HourID;ViewBag.ActivityID=new SelectListdb.Projects;ViewBag.ProjectID=new SelectListdb.Activities;ViewBag.Activities=db.Activities.ToList;ViewBag.Hours=db.Hours.ToList;返回Viewnew Hour;}//end method createHI Drumil,thx用于重播,但如果我这样做:@Html.DropDownListFormodel=>model.Activity.ActivityID,new SelectListModel.Activity.Project.Activity as IEnumerable,ActivityID,Name,null,new{id=Activity}@Html.ValidationMessageFormodel=>model.ActivityID然后在这一行:model.Activity.Project.Activity最后一个活动a是红色的,我改为:model.Activity.Project.activities是的,很好……最终你有了bi
不管你揭露了什么财产。。。。现在它工作正常了吗?我通过以下行得到错误:Model.Activity=null:@Html.DropDownListFormodel=>Model.Activity.ActivityID,new SelectListModel.Activity.Project.Activities as IEnumerable,ActivityID,Name,null,new{id=Activity}我这样尝试:@Html.DropDownListFormodel=>model.Activity.Project.Activities,new SelectListEnumerable.Empty,ActivityID,Name,null,new{id=Activity}但是当我按下save按钮时,活动的下拉列表将变为红色,但是如何使用ViewModel进行项目活动。也许这就是解决办法?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Globalization;
using System.Web.Mvc;

namespace ManyToMany.Models
{
    public class Hour
    {

        //public string Name { get; set; }
        //public string Url { get; set; }
        public int HourID { get; set; }
       // public virtual Week Week { get; set; }
        public int? WeekID { get; set; }
        //[Key]
        public int? ActivityID { get; set; }
        public virtual Activity Activity { get; set; }
        //public int ActivtityID { get; set; }






        //[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0:c}")]
        //public decimal? Amount { get; set; }


        [ReadOnly(true)]
        //[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public decimal HourTotal { get { return GetTotalHours(); }   }



        public int WeekNumber { get; set; }
        public int yearNumber { get; set; }

        //Properties days:

        public DayOfWeek DayWeek { get; set; }

        //public DateTime DateDay { get; set; }


       [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Monday { get; set; }
        public int Days { get; set; }


        [DataType(DataType.Date)]//
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Tuesday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Wendsday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Thursday { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Fryday { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Saterday { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime? Sunday { get; set; }
        //End properties days


        //Properties hours:
       // [DisplayFormat(DataFormatString = "{0:#.##0.0#}", ApplyFormatInEditMode = true)]
        [Required]
        //[DisplayFormat(DataFormatString= "{0:#,##0.000#}")] 
        public Decimal MondayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal TuesdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal WendsdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal ThursdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal FrydayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal SaterdayHours { get; set; }
        //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true)]
        [Required]
        public Decimal SundayHOurs { get; set; }

        public string TextMonday { get; set; }
        public string TextTuesday { get; set; }
        public string TextWendsday { get; set; }
        public string TextThursday { get; set; }
        public string TextFryday { get; set; }
        public string TextSaterday { get; set; }
        public string TextSunday { get; set; }





        public decimal GetTotalHours()
        {
            return MondayHours + 
                   TuesdayHours + 
                   WendsdayHours + 
                   ThursdayHours + 
                   FrydayHours + 
                   SaterdayHours +
                   SundayHOurs;
        }




        //public IEnumerable<SelectListItem> Hour { get; set; }



        public Hour()
        {

            //Activity = new List<Activity>();

            this.yearNumber = DateTime.Now.Year;

            Days = DateTime.Now.DayOfWeek - DayOfWeek.Monday;
            Monday = DateTime.Now.AddDays(-Days);
            Tuesday =  DateTime.Now.AddDays(0);// .Monday.AddDays(1).ToShortDateString();//.ToShortDateString());
            Wendsday = DateTime.Now.AddDays(1);  //DateTime.Parse(Monday.AddDays(2).ToShortDateString());
            Thursday = DateTime.Now.AddDays(2);    //DateTime.Parse(Monday.AddDays(3).ToShortDateString());
            Fryday = DateTime.Now.AddDays(3);          //DateTime.Parse(Monday.AddDays(4).ToShortDateString());
            Saterday = DateTime.Now.AddDays(4);              //DateTime.Parse(Monday.AddDays(5).ToShortDateString());
            Sunday =   DateTime.Now.AddDays(5);             //DateTime.Parse(Monday.AddDays(6).ToShortDateString());

            this.WeekNumber = System.Threading.Thread.CurrentThread.CurrentCulture.Calendar.GetWeekOfYear(DateTime.Now, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
        }
    }
}
 <div class="editor-field">
                    @Html.DropDownListFor(model => model.Activity.ActivityID, new SelectList(ViewBag.Activities as IEnumerable,"ActivityID","Name"),null, new {id ="Activity"})
                    @Html.ValidationMessageFor(model=> model.ActivityID)
 </div> 
 <div class="editor-field">
                    @Html.DropDownListFor(model => model.Activity.ActivityID, new SelectList(Model.Activity.Project.Activity as IEnumerable,"ActivityID","Name"),null, new {id ="Activity"})
                    @Html.ValidationMessageFor(model=> model.ActivityID)
 </div> 
 public ActionResult Edit(int id)
        {
            Hour hour = db.Hours.Find(id);
            ModelState.AddModelError("Name", "What a nice name");
            return View(hour);
        }
    [HttpPost]
    public ActionResult Edit(Hour hour)
    {
        if (ModelState.IsValid)
        {
            db.Entry(hour).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.WeekID = new SelectList(db.Weeks, "WeekID", "WeekID", hour.WeekID);
        ViewBag.Projects = db.Projects.ToList();
        ViewBag.Activities = db.Activities.ToList();
        return View(hour);
    }