Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 实体框架中的DropDownListFor_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 实体框架中的DropDownListFor

Asp.net mvc 实体框架中的DropDownListFor,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,这个问题可能已经被问了一千多次了,但在尝试了10多次之后,我就是想不起来 我试图创建一个“教师”,在这里可以选择教师所在的部门 型号: public class CreateTeacherModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.EmailAddress)]

这个问题可能已经被问了一千多次了,但在尝试了10多次之后,我就是想不起来

我试图创建一个“教师”,在这里可以选择教师所在的部门

型号:

public class CreateTeacherModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [Display(Name = "Division")]
    public Division Division { get; set; }

    [Display(Name = "Divisions")]
    public Dictionary<Guid, Division> Divisions
    {
        get
        {
            var db = new IBPVEntities();

            Division = db.Division.FirstOrDefault();

            return db.Division.ToDictionary(division => division.DivisionId);
        }
    }
视图:

分区有两个属性:分区ID(guid)和名称(字符串)

我完全不知道该怎么办了,有人能帮我吗

提前谢谢

@Html.DropDownListFor(
    x => x.Division, 
    new SelectList(
        Model.Divisions.ToList().Select(
            x => new { Value = x.Value.DivisionId, Text = x.Value.Name }
        ), 
        "Value", 
        "Text"
    )
)
或者,可以向视图模型中添加属性:

public IEnumerable<SelectListItem> DivisionsList
{
    get
    {
        return Divisions.ToList().Select(
            x => new SelectListItem 
            { 
                Value = x.Value.DivisionId.ToString(), 
                Text = x.Value.Name 
            }
        );
    }
}
或者,另一个属性是根本不在视图模型中使用字典,而是直接使用:

[Display(Name = "Divisions")]
public IEnumerable<SelectListItem> Divisions
{
    get
    {
        var db = new IBPVEntities();
        Division = db.Division.FirstOrDefault();
        return db.Division.ToList().Select(x => new SelectListItem
        {
            Value = x.DivisionId.ToString(),
            Text = x.Name
        });
    }
}
或者,可以向视图模型中添加属性:

public IEnumerable<SelectListItem> DivisionsList
{
    get
    {
        return Divisions.ToList().Select(
            x => new SelectListItem 
            { 
                Value = x.Value.DivisionId.ToString(), 
                Text = x.Value.Name 
            }
        );
    }
}
或者,另一个属性是根本不在视图模型中使用字典,而是直接使用:

[Display(Name = "Divisions")]
public IEnumerable<SelectListItem> Divisions
{
    get
    {
        var db = new IBPVEntities();
        Division = db.Division.FirstOrDefault();
        return db.Division.ToList().Select(x => new SelectListItem
        {
            Value = x.DivisionId.ToString(),
            Text = x.Name
        });
    }
}
按照你所说的“解决”分歧是很简单的。在您的模型(CreateTacherModel)中,您实际上不会使用Division作为属性类型,而是使用Guid:

public Guid DivisionId { get; set; }
在控制器中,进行查找以获得实际的除法:

db.Divisions.First(x => x.Id == Model.DivisionId);
如果您需要将CreateTacherModel转换为实体框架对象,您可以查看以执行转换(这就是Stack Overflow在幕后的工作方式)

如果你想得到幻想,你可以注册一个自定义的模型活页夹。请参见示例。

在初始化时“结算”除法非常简单。在您的模型(CreateTacherModel)中,您实际上不会使用Division作为属性类型,而是使用Guid:

public Guid DivisionId { get; set; }
在控制器中,进行查找以获得实际的除法:

db.Divisions.First(x => x.Id == Model.DivisionId);
如果您需要将CreateTacherModel转换为实体框架对象,您可以查看以执行转换(这就是Stack Overflow在幕后的工作方式)


如果你想得到幻想,你可以注册一个自定义的模型活页夹。请参见示例。

谢谢!这对我帮助很大,尽管。。。当我到达岗位时,部门似乎没有设置好?谢谢!这对我帮助很大,尽管。。。当我到达岗位时,部门似乎没有设置?问题是什么?什么对你不起作用?有什么问题?什么对你不起作用?